# Welcome to Fluid!

We’re using NFT lending to pioneer "The Creator Economy 2.0".

The NFT ecosystem is in decline. Creator royalties have disappeared, floor prices are in descent, and NFT communities have been less…communal. The path we’re on right now is unsustainable.

We’re here to change that by being the first NFT lending platform that provides royalties to creators. We’re on a mission to build a more prosperous creator economy. Are you in?

## Quick links

{% content-ref url="/pages/4CdXlZfMNIJe2ZwYkdBk" %}
[What we do](/overview/what-we-do)
{% endcontent-ref %}

{% content-ref url="/pages/uuJDDSJerd9co2JbDoBt" %}
[Our Features](/overview/our-features)
{% endcontent-ref %}

{% content-ref url="/pages/3qVVh6exdGWF7vCOh2U3" %}
[About Us](/overview/about-us)
{% endcontent-ref %}

## Get Started

We've put together some helpful guides for you to get setup with our product quickly and easily.

{% content-ref url="/pages/ymhiVI0fVM4nQHnngU8K" %}
[For Borrowers](/product-guides/for-borrowers)
{% endcontent-ref %}

{% content-ref url="/pages/pBBrWvrXgyKjO5px65ca" %}
[For Creators](/product-guides/for-creators)
{% endcontent-ref %}

{% content-ref url="/pages/FGp10FkmXX65oaSaxy0n" %}
[For the Community](/product-guides/for-the-culture)
{% endcontent-ref %}

## "In It For The Tech"

Here we provide you with technical resources and guides to help build using our infrastructure.

{% content-ref url="/pages/9EUg7WwvGrC6U4bLX7Cw" %}
[Protocol Overview](/technical-resources/protocol-overview)
{% endcontent-ref %}

{% content-ref url="/pages/UYg5jKdF9aYdMGcji5nu" %}
[Risk Framework](/risk-management/risk-framework)
{% endcontent-ref %}

{% content-ref url="/pages/dcFgM0mPXhUxcXsIrQkm" %}
[Developers](/technical-resources/developers)
{% endcontent-ref %}


# What we do

The Community-First NFT Lending Protocol

FluidNFT is an NFT lending protocol that allows holders to instantly and safely access liquidity by using their NFTs as collateral; while supporting the work of creators and missions they believe in.

As collectors and community members ourselves, we know how much our NFTs mean to us. We also wanted to find a way to support the creators and missions we believe in and help others do the same. So we created the most borrower and community-friendly lending platform.&#x20;

## Video overview

Got 2 minutes? Check out a video overview of our product:

Coming soon&#x20;


# Our Features

Get Flexible Loans While Support Creators And Safeguarding Your Collection

## Creator Royalties on Loans

Creators receive royalties on every repaid loan, supporting a more sustainable creator ecosystem.

<figure><img src="/files/FCGXt4ZzY7RuFWKTalPL" alt=""><figcaption><p>Earn points by being awesome <span data-gb-custom-inline data-tag="emoji" data-code="1f49c">💜</span></p></figcaption></figure>

## Pro-Rata Loans

Borrowers only pay interest while the loan is outstanding. Save money by repaying your loan early.

<figure><img src="/files/LUJktwjYmtST4tKgdsxk" alt=""><figcaption><p>Only pay for what you use <span data-gb-custom-inline data-tag="emoji" data-code="1f91d">🤝</span></p></figcaption></figure>

## Instant Refinancing

Instantly and permissionlessly refinance loans to borrow more against an appreciated asset, make loan partial repayments, and / or get extensions on your loan.

<figure><img src="/files/VK22yAyJbA8SLaR77FHw" alt=""><figcaption><p>Batch refinance to save on gas <span data-gb-custom-inline data-tag="emoji" data-code="1f609">😉</span></p></figcaption></figure>

## Borrow Against Your NFT's NFTs :exploding\_head:

We support ERC6551 token accounts. Borrow against your NFT and its inventory. Save on gas and borrow against 1000s of NFTs in a single transaction.

<div align="left"><figure><img src="/files/soUZSDttSxDMa0zUlPAv" alt="" width="563"><figcaption><p><a href="https://blog.thirdweb.com/erc-6551-token-bound-accounts/">Excellent write up on ERC6551 from thirdweb</a></p></figcaption></figure></div>

## Borrow More Against Rare NFTs

We support collection, trait and tailored NFT Oracle pricing. &#x20;

<div align="left"><figure><img src="/files/xPRofS6bpRCDLYPLw9tN" alt="" width="188"><figcaption><p>Unlock your grails <span data-gb-custom-inline data-tag="emoji" data-code="1f3c6">🏆</span></p></figcaption></figure></div>

## Open Edition NFT Support

Borrow against either ERC721 or any amount of ERC1155 NFTs with the same user experience.

<div align="left"><figure><img src="/files/Ke2NfonY7tlH3Tp9rZs8" alt="" width="188"><figcaption><p>We take all kinds here <span data-gb-custom-inline data-tag="emoji" data-code="1f47d">👽</span></p></figcaption></figure></div>

## Retain NFT Utility

Claim airdrops, discord and token-gated events thanks to our integration with Delegate Cash.

<div align="left"><figure><img src="/files/spcYxJZuWbotKhI4IGFi" alt="" width="120"><figcaption><p>Prove token ownership</p></figcaption></figure></div>

## Borrower-Friendly Liquidations

In the event of a liquidation, borrowers receive 90% of the auction price as compensation minus the outstanding debt. Dutch auctions with high start price multiples ensure maximum recovery.

![](/files/zwtHBKANK0UxTzTFHV6P)

## Borrower Liquidation Protection

All loans are fixed term, which means borrowers cannot suddenly lose their NFT without warning. Furthermore, borrowers have a 1-week grace period on all loans, just in case.

![](/files/5GbaEqEEIe2yCxH9xqpr)


# About Us

We Believe NFT Lending Can Be Used As A Force For Good

## Our Mission

We are for the builders, innovators, and dreamers. We are united by our belief in the power of NFTs to change the world by aligning capital and incentives around a shared mission. We are committed to working together to build a better future for everyone.&#x20;

## Our Values

#### <mark style="color:purple;">Community-First</mark>&#x20;

We put creator communities first in everything we design, build and do. We live to serve.&#x20;

#### <mark style="color:purple;">Innovation + Education</mark>

We believe innovation and education go hand in hand. We are constantly innovating and, more importantly, working with our users to help them take advantage while managing any risk.

#### <mark style="color:purple;">Sustainable Empowerment</mark>

We focus our energy on building the tools and infrastructure necessary to help creator communities grow and prosper together - now and for the long-haul.

## Our Team

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><img src="/files/JR0HQDl62C0CJoJbORh8" alt=""></td><td><h4><mark style="color:purple;">Michael - CEO / CTO</mark></h4></td><td>4x founder, MeebitsDAO co-founder &#x26; steerCo, curator at Artizen Fund, startup mentor at Graph Paper Capital, AI research engineer, prev: JP Morgan</td><td></td></tr><tr><td><img src="/files/3QDLSnbVF7HPylqZSjwG" alt=""></td><td><h4><mark style="color:purple;">Homerfan - Marketing</mark></h4></td><td>Experienced NFT lender, NFT-Fi startup advisor &#x26; classically trained marketer, prev: Head of Marketing at Squiggle DAO and Goblin Sax</td><td></td></tr><tr><td><img src="/files/7kXxDPuwNPD26ekyJbv7" alt=""></td><td><h4><mark style="color:purple;">Zsofie - Protocol</mark></h4></td><td>Blockchain architect passionate about funding creativity &#x26; rewiring the world on-chain, prev: Lead Solidity dev at Artizen Fund and Linum Labs</td><td></td></tr><tr><td><img src="/files/eDVz7OUT4OKLYZkAArc0" alt="" data-size="original"></td><td><h4><mark style="color:purple;">Pablo - Interface</mark></h4></td><td>Ex Silicon-valley principal front-end engineer with 15+ years experience building for growth</td><td></td></tr><tr><td><img src="/files/fuV0DEbmyC3duS1Mr7vg" alt=""></td><td><h4><mark style="color:purple;">Fnkl - Community</mark></h4></td><td>Socials &#x26; Community Manager at Squiggle DAO, with 10+ years experience in community management </td><td></td></tr><tr><td><img src="/files/uXfTO82p1CaENAMqjT3f" alt=""></td><td><h4><mark style="color:purple;">Iñigo - Design</mark></h4></td><td>Senior UI &#x26; Product Designer with 15+ years experience designing human-centric UX</td><td></td></tr></tbody></table>


# For Borrowers

Borrower how-to guides

{% content-ref url="/pages/bFgdEkvCqfjRnGdWAWcp" %}
[Get a Loan](/product-guides/for-borrowers/get-a-loan)
{% endcontent-ref %}

{% content-ref url="/pages/6rX7BrekIL5JsHXpoiUx" %}
[Repay a Loan](/product-guides/for-borrowers/repay-a-loan)
{% endcontent-ref %}

{% content-ref url="/pages/z55KcpvvbmjSZptGTUkX" %}
[Refinance a Loan](/product-guides/for-borrowers/refinance-a-loan)
{% endcontent-ref %}

{% content-ref url="/pages/DZlz25VWZbD3qXy8FePk" %}
[Get Help Repaying](/product-guides/for-borrowers/get-help-repaying)
{% endcontent-ref %}


# Get a Loan

Borrow ETH, WETH and other ERC20 tokens using your NFT(s) as collateral.

## 1. Connect your wallet

Connect your web3 wallet to access the Fluid dApp.

<figure><img src="/files/n23kxTDj7CfVx9Jo5rrR" alt=""><figcaption><p>Connect your wallet</p></figcaption></figure>

## 2. Go to "My Account"

Go to "My Account" for all available actions.

<figure><img src="/files/RdH2sCILzBiJinncTFd5" alt=""><figcaption><p>Go to "My Account"</p></figcaption></figure>

## 3. Choose a collection

Choose any supported collection within your account.

<figure><img src="/files/6mxz2Dv6OWSZ3aOhBG9W" alt=""><figcaption><p>Choose a collection</p></figcaption></figure>

## 4. Configure your loan

Select collateral, loan duration, amount, and get an instant loan.

<figure><img src="/files/6owaT1YI6t4Jc0djCbt3" alt=""><figcaption><p>Configure your loan</p></figcaption></figure>

## 5. Approve the collection&#x20;

Approve the collection as collateral - this is required once per collection.

<figure><img src="/files/kdrovD3ruhcR4HgAe84R" alt=""><figcaption><p>Approve the collection (first time, only)</p></figcaption></figure>

## 6. Confirm the loan

Final check before executing the loan.

<figure><img src="/files/JOJ3ndI7LoKcGq0JS7hC" alt=""><figcaption><p>Confirm the loan</p></figcaption></figure>

## 7. Success! :confetti\_ball:

The ETH / tokens will be in your wallet - the deposited NFTs will be held as collateral.&#x20;

<figure><img src="/files/ig8rJB5shZDTSV8yI60u" alt=""><figcaption><p>Success! Now, what's this about points..? <span data-gb-custom-inline data-tag="emoji" data-code="1f440">👀</span></p></figcaption></figure>


# Repay a Loan

Repay a loan to retrieve the NFT(s) used as collateral.

## 1. Go to "My Account"

Go to "My Account" for all available actions.

<figure><img src="/files/7Dyht7UryXqlNdFPlePH" alt=""><figcaption><p>Go to "My Account"</p></figcaption></figure>

## 2. Choose a loan

Choose a loan to repay.

<figure><img src="/files/O1YR53nG3zYgzJnZWkwJ" alt=""><figcaption><p>Choose a loan</p></figcaption></figure>

## 3. Click "Repay"

Repay the outstanding against all or select NFTs to retrieve these from escrow.&#x20;

<figure><img src="/files/zdGdcnPNKgcgf8ci7rjL" alt=""><figcaption><p>Click "Repay"</p></figcaption></figure>

## 4. Approve transfer

Approve tokens for transfer - this is required once per token.

<figure><img src="/files/rrgIV2FfZAnYLGXx3sN3" alt=""><figcaption><p>Approve transfer</p></figcaption></figure>

## 5. Confirm repay

Final check before executing repay.

<figure><img src="/files/1qeGJKmC8Keb4h39YA8x" alt=""><figcaption><p>Confirm repayment</p></figcaption></figure>

## 6. Success! :confetti\_ball:

The NFT(s) will be back in your wallet - the ETH / tokens will have been used as payment.

<figure><img src="/files/cCeLUtpDTI7jrUazpUD0" alt=""><figcaption><p>Success! Points, you say..? <span data-gb-custom-inline data-tag="emoji" data-code="1f440">👀</span></p></figcaption></figure>


# Refinance a Loan

Instantly and permissionlessly refinance a loan to extend the maturity date, borrow more against an appreciated asset or make a partial repayment.

## 1. Go to "My Account"

Go to "My Account" for all available actions.

<figure><img src="/files/tmITtIJUu7sonRjcX283" alt=""><figcaption><p>Go to "My Account</p></figcaption></figure>

## 2. Choose a loan

Choose a loan to refinance.&#x20;

<figure><img src="/files/O1YR53nG3zYgzJnZWkwJ" alt=""><figcaption><p>Choose a loan</p></figcaption></figure>

## 3. Click "Refinance"

Refinance the outstanding against all or selected NFTs.&#x20;

<figure><img src="/files/NdFy9zaMMCgkSWvkisTr" alt=""><figcaption><p>Click "Refinance"</p></figcaption></figure>

## 4. Configure & Approve

Configure refinance loan, and approve tokens for transfer - this is required once per token.

<figure><img src="/files/wrOea0m03h3tLDu2cDh9" alt=""><figcaption><p>Configure &#x26; Approve</p></figcaption></figure>

## 5. Confirm refinance

Final check before executing refinance

<figure><img src="/files/9YD2HB2JrkdwmIzzppW6" alt=""><figcaption><p>Confirm refinance</p></figcaption></figure>

## 6. Success! :confetti\_ball:.

Loan terms will update, the NFT(s) will remain in escrow, and any token transfers will be actioned.

<figure><img src="/files/rWv0P35onBLZbGSHxrQh" alt=""><figcaption><p>Success! Share on twitter to earn points</p></figcaption></figure>


# Get Help Repaying

Need help repaying? Click "Get help" to chat with our team.

## 1. Go to "My Account"

Go to "My Account" for all available actions.

<figure><img src="/files/tmITtIJUu7sonRjcX283" alt=""><figcaption><p>Go to "My Account</p></figcaption></figure>

## 2. Choose a loan

Choose a loan to repay.

<figure><img src="/files/O1YR53nG3zYgzJnZWkwJ" alt=""><figcaption><p>Choose a loan</p></figcaption></figure>

## 3. Click "Get help"

Click "Get help" to chat with our team.

<figure><img src="/files/7MoFm5jIFu2P699UsJAo" alt=""><figcaption></figcaption></figure>


# For Creators

Creator / Lender how-to guides

{% content-ref url="/pages/4H7hduXXyASXkOLFNQGL" %}
[Add a Collection](/product-guides/for-creators/add-a-collection)
{% endcontent-ref %}

{% content-ref url="/pages/FDbXVUgCfY3HyM4XP2wZ" %}
[Deposit ETH / Tokens](/product-guides/for-creators/deposit-eth-tokens)
{% endcontent-ref %}

{% content-ref url="/pages/4k52ztw9Aw1tv3BvW48M" %}
[Withdraw ETH / Tokens](/product-guides/for-creators/withdraw-eth-tokens)
{% endcontent-ref %}

{% content-ref url="/pages/uEVp65Bnr40OrWj7g2rM" %}
[Trigger an Auction](/product-guides/for-the-culture/trigger-an-auction)
{% endcontent-ref %}


# Add a Collection

Fluid partners with creators to generate perpetual income post royalties.

![](/files/ZKTDCFzuWKsKOWD7Hp2F)

Contact [gm@fluidnft.org](mailto:) to partner with us.&#x20;


# Deposit ETH / Tokens

Deposit ETH, WETH and other ERC20 tokens to earn yield.

## 1. Connect your wallet

Connect your web3 wallet to access the Fluid dApp.

<figure><img src="/files/n23kxTDj7CfVx9Jo5rrR" alt=""><figcaption><p>Connect your wallet</p></figcaption></figure>

## 2. Go to "My Account"

Go to "My Account" for all available actions.

<figure><img src="/files/7Dyht7UryXqlNdFPlePH" alt=""><figcaption><p>Go to "My Account"</p></figcaption></figure>

## 3. Choose a lending pool

Choose a lending pool to make a deposit.

<figure><img src="/files/LoYLFuJuTpnQryCp6z2V" alt=""><figcaption><p>Choose a lending pool</p></figcaption></figure>

## 4. Click "Deposit"

Deposit ETH / Tokens to start earning yield.

<figure><img src="/files/Xns0rRTiHpFaZ01t3A3B" alt=""><figcaption><p>Click "Deposit"</p></figcaption></figure>

## 5. Approve transfer

Approve tokens for transfer - this is required once per token.

<figure><img src="/files/a5t4ciMkQtONSgRyPUQS" alt=""><figcaption><p>Approve transfer</p></figcaption></figure>

## 6. Confirm deposit

Final check before executing deposit.

<figure><img src="/files/xhK3roI8RrPyjajIsxgE" alt=""><figcaption><p>Confirm deposit</p></figcaption></figure>

## 7. Success! :confetti\_ball:

Interest-earning fTokens will be in your wallet - redeem these later for ETH / tokens plus interest.

<figure><img src="/files/BNlCiQZzvBr1wWHS5ha8" alt=""><figcaption><p>Success! Now, what's this about points..? <span data-gb-custom-inline data-tag="emoji" data-code="1f440">👀</span></p></figcaption></figure>


# Withdraw ETH / Tokens

Withdraw ETH / tokens plus interest by redeeming interest-earning fTokens.

## 1. Go to "My Account"

Go to "My Account" for all available actions.

<figure><img src="/files/7Dyht7UryXqlNdFPlePH" alt=""><figcaption><p>Go to "My Account"</p></figcaption></figure>

## 2. Choose a lending pool

Choose a lending pool to make a deposit.

<figure><img src="/files/LoYLFuJuTpnQryCp6z2V" alt=""><figcaption><p>Choose a lending pool</p></figcaption></figure>

## 3. Click "Withdraw"

Withdraw ETH / Tokens plus interest by redeeming interest-earning fTokens.

<figure><img src="/files/ODIvuZEh2B0X6Fp8mzlf" alt=""><figcaption><p>Click "Withdraw"</p></figcaption></figure>

## 4. Approve transfer

Approve fTokens for transfer - this is required once per fToken.

<figure><img src="/files/OsASxbDwuBs1zDNaON8z" alt=""><figcaption><p>Approve transfer</p></figcaption></figure>

## 5. Confirm withdraw

Final check before executing withdraw.

<figure><img src="/files/hwEF2ZswZ9AkBSLscpDY" alt=""><figcaption><p>Confirm withdraw</p></figcaption></figure>

## 6. Success! :confetti\_ball:

ETH / tokens plus interest will be in your wallet - in exchange for interest-earning fTokens.

<figure><img src="/files/vDRQ9aXxSDqDa3L86rhf" alt=""><figcaption><p>Success! Points, you say..? <span data-gb-custom-inline data-tag="emoji" data-code="1f440">👀</span></p></figcaption></figure>


# For the Community

Community-wide how-to guides

{% content-ref url="/pages/uEVp65Bnr40OrWj7g2rM" %}
[Trigger an Auction](/product-guides/for-the-culture/trigger-an-auction)
{% endcontent-ref %}

{% content-ref url="/pages/k9TGRqd2lknQZG3PRnY8" %}
[Purchase NFTs at Auction](/product-guides/for-the-culture/purchase-nfts-at-auction)
{% endcontent-ref %}


# Trigger an Auction

Trigger an auction to earn a fee for protecting the lending pool from bad debt.

## 1. Connect your wallet

Connect your web3 wallet to access the Fluid dApp.

<figure><img src="/files/n23kxTDj7CfVx9Jo5rrR" alt=""><figcaption><p>Connect your wallet</p></figcaption></figure>

## 2. Go to "My Account"

Go to "My Account" for all available actions.

<figure><img src="/files/7Dyht7UryXqlNdFPlePH" alt=""><figcaption><p>Go to "My Account"</p></figcaption></figure>

## 3. Select defaulted loan(s)

Select defaulted loan(s) where the grace period has ended and click "Trigger Auction".

<figure><img src="/files/tEKiNTrmTKyBttYKFCAq" alt=""><figcaption><p>Select defaulted loan(s)</p></figcaption></figure>

## 4. Confirm trigger auction

Final check before executing trigger auction.

<figure><img src="/files/hrl37rtS5sn4odfCCyWQ" alt=""><figcaption><p>Confirm trigger auction</p></figcaption></figure>

## 5. Success! :confetti\_ball:

Once the NFT is purchased you will receive a 1% trigger bonus in your account.

<figure><img src="/files/tQDQzfZjSvwnPggYBNdP" alt=""><figcaption><p>Success! Now, what's this about points..? <span data-gb-custom-inline data-tag="emoji" data-code="1f440">👀</span></p></figcaption></figure>


# Purchase NFTs at Auction

Purchase the underlying NFT(s) from a defaulted loan in a Dutch auction.

## 1. Go to "Auctions"

Go to "Auctions" to view active auctions.

<figure><img src="/files/u4wwvfPf0mdBWKDNYLRs" alt=""><figcaption><p>Go to "Auctions"</p></figcaption></figure>

## 2. Select auction item(s)

Click "Buy Now" to purchase selected auction items. Auctions are price descending. First bid wins.

<figure><img src="/files/NhvdLDEggcpZxVQriS9B" alt=""><figcaption><p>Select auction items &#x26; click "Buy Now"</p></figcaption></figure>

## 3. Approve transfer

Approve tokens for transfer - this is required once per token.

<figure><img src="/files/Hwdd2DhSFmMEJJ27IAtn" alt=""><figcaption><p>Approve transfer</p></figcaption></figure>

## 4. Confirm purchase

Final check before executing purchase.

<figure><img src="/files/2K04PpCXLRFE9rDIWsOz" alt=""><figcaption><p>Confirm purchase</p></figcaption></figure>

## 5. Success! :confetti\_ball:

The NFT(s) will be transferred to your wallet - the ETH / tokens will be used as payment.

<figure><img src="/files/UBHfQ6lSFTDO7CGD9xUh" alt=""><figcaption><p>Success! Points, you say..? <span data-gb-custom-inline data-tag="emoji" data-code="1f440">👀</span></p></figcaption></figure>


# Risk Framework

Mitigating risk throughout the loan cycle, from underwriting to recovery

The composability of the DeFi ecosystem implies risk from an individual component flow into all dependent systems. Assets are at the heart of the FluidNFT protocol as they enable operations and account for the holdings and liabilities of the protocol.&#x20;

This documentation, developed by the Risk Management Team, focuses on the risk management for assets supported by FluidNFT. The risk assessment considers market, counter-party and smart contract risks for the assets selected for the FluidNFT protocol, aiming to contribute to higher risk standards within NFTxDeFi.


# Data

Historic and Real-Time Data from Multiple Sources

FluidNFT's internal Risk Model is trained using historic & real-time data. This is sourced from several different data partners / provider, including:

| Partner / Provider | Description             |
| ------------------ | ----------------------- |
| Upshot             | NFT Pricing             |
| OpenSea            | NFT Pricing & Analytics |
| Alchemy            | NFT Data & Analytics    |
| Reservoir          | NFT Data & Analytics    |
| Dune Analytics     | On-Chain Data Analytics |


# Methodology

Our Methodology for the Accurate Quantification and Qualification of Risks

The composability of DeFi enables the FluidNFT Protocol to connect with the rest of the ecosystem. However, it also exposes the protocol to financial contagion. FluidNFT uses isolation pools to protect against cross-collection risk, and Dutch auctions to mitigate liquidation cascades. Still, each currency and NFT collateral comes with an amount of risk. To safeguard the solvency of the protocol we investigate three different levels. &#x20;

First we look at the smart contract security and counter-parties in governance. If these risks are too high, the assets will be disqualified from the protocol. Then we look at market risks, which can be managed via the protocol's parameters.&#x20;

## Risk Scale

Our risk scale ranges from **lowest risk A+** for the safest assets of the protocol (e.g. Ethereum as a currency and CryptoPunks as a collateral) to the **highest risk D-**. NFTs with the highest risk factors will not qualify as collateral to shield solvency.&#x20;

## Risk Factors

### Smart Contract Risk

**Smart contract risk** focuses on the technical security of an asset's underlying code. If this is compromised it will threaten the solvency of the protocol. Projects must have undergone audits to be considered. We assess **maturity** based on the number of days and the number of transactions of the smart contract as a representation of use, community and development. These proxies show how battle-tested the code is.&#x20;

Smart contract hacks have already resulted in millions of losses and so NFTs with the highest smart-contract risk D and below, cannot be used as collateral. To protect collateral, currencies with a risk rating below B- will not be integrated in the protocol.&#x20;

### Counter-party Risk

**Counter-party risk** assesses qualitatively how and by who the asset is governed. Specifically for NFTs we observe execution risk; how much of the assets value depends on its creator(s) continuing to execute well over time, the capitalisation of holders, and the degree of holder decentralisation; that no single of group of holders may disproportionally affect the market. The counter-party risk is measured from the level of **centralisation** corresponding to the number of holders within the collection and the **trust** in the creator or project over time.

NFTs with high counter-party risk below D+ disqualify as collateral.

### Market Risk

**Market risks** are linked to the market size and fluctuations in offer and demand. These risks are particularly relevant for NFTs used as collateral within the protocol. If and when a loan defaults a liquidation auction is triggered. The markets then need to hold sufficient volume to absorb these liquidations without triggering liquidation cascades.&#x20;

### Currency Risk

**Currency risk** is evaluated against smart contract, counter-party and market risks. To safeguard collateralised NFTs, only those a risk rating of B- and above can be integrated within the protocol.&#x20;

### Valuation Risk

**Valuation risk** relates to error appraising NFT valuations. Specifically, NFTs with overestimated valuations may be used to extract value from lending pools and lead to the accumulation of bad debt within the protocol.

### Liquidity Risk

**Liquidity risk** is the risk of there being insufficient liquidity for business-as-usual operations. That lenders would have to wait for borrower repayments until being able to withdraw their capital.&#x20;

## Risk Assessment

Historical data is extracted via third party APIs and combined with on-chain data. The methodology to link historical data to risk factors is based on rigid criteria for each factor.&#x20;

### Risk Quantification Criterion

The historical data is computed through our risk model resulting in risk ratings from the lowest risk A+ to the highest risks D-; quantifying the risk and severity of capital loss over a set period.&#x20;

### Risk Models&#x20;

#### Collateral Risk Model

Our Collateral Risk Model is continually being trained and optimised on new data sources. We use best of breed technologies, combined with the latest AI research, and bench-mark against our data providers to ensure we provide the most accurate results.&#x20;

#### Currency Risk Model

Our Currency Risk Model is based on the excellent risk analysis from AAVE, as per the table below:

<table><thead><tr><th>Risk Rating</th><th>Days (>)</th><th>Transactions (>)</th><th>Holders (>)</th><th>Permission</th><th>Market Cap (>)</th><th>Average Volume (1M&#x26;3M)</th><th>Normalised Volatility (1M&#x26;3M&#x26;6M)</th><th data-hidden>Days (>)</th><th data-hidden>Holders</th><th data-hidden>Market Cap (>)</th><th data-hidden>Average Volume (>)</th><th data-hidden>Normalised Volatility</th><th data-hidden>Transactions (>)</th></tr></thead><tbody><tr><td><p>A+</p><p>A</p><p>A-</p></td><td><p>730</p><p>730</p><p>730</p></td><td><p>500,000,000</p><p>100,000,000</p><p>10,000,000</p></td><td><p>100,000,000</p><p>1,000,000</p><p>500,000</p></td><td><p>ETH</p><p>Centralised</p><p></p></td><td><p>$14,900,000,000</p><p>$10,000,000,000</p><p>$5,000,000,000</p></td><td><p>$20,000,000,000</p><p>$10,000,000,000</p><p>$2,500,000,000</p></td><td><p>0.005</p><p>0.015</p><p>0.025</p></td><td><p>730</p><p>730</p><p>730</p></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td><p>B+</p><p>B</p><p>B-</p></td><td><p>365</p><p>365</p><p></p></td><td><p>1,000,000</p><p>350,000</p><p>350,000</p></td><td><p>100,000</p><p>50,000</p><p>25,000</p></td><td><p>Permissionless</p><p></p><p>Centralised</p></td><td><p>$500,000,000</p><p>$250,000,000</p><p>$100,000,000</p></td><td><p>$700,000,000</p><p>$500,000,000</p><p>$100,000,000</p></td><td><p>0.038</p><p>0.051</p><p>0.064</p></td><td><p>365</p><p>270</p><p>180</p></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td><p>C+</p><p>C</p><p>C-</p><p>C-</p></td><td><p>365</p><p></p><p></p><p>365</p></td><td><p>100,000</p><p></p><p>100,000</p><p>25,000</p></td><td><p>10,000</p><p></p><p>2,500</p><p></p></td><td><p></p><p>Controlling functions</p><p></p><p>Controlling functions</p></td><td><p>$50,000,000</p><p></p><p>$30,000,000</p><p>$15,000,000</p></td><td><p>$50,000,000</p><p></p><p>$30,000,000</p><p>$15,000,000</p></td><td><p>0.079</p><p>0.094</p><p>0.109</p><p></p></td><td><p>90</p><p>60</p><p>30</p></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td><p>D+</p><p>D</p><p>D-</p></td><td><p></p><p>365</p><p></p></td><td><p>25,000</p><p></p><p></p></td><td></td><td><p>Centralised with audit</p><p>Centralised</p><p>Opaque</p></td><td><p>$10,000,000</p><p>$5,000,000</p><p></p></td><td><p>$10,000,000</p><p>$5,000,000</p><p></p></td><td><p>0.124</p><p>0.139</p><p></p></td><td><p>0</p><p>0</p><p>0</p></td><td></td><td></td><td></td><td></td><td></td></tr></tbody></table>


# Risk Parameters

The Calibration of Risk Parameters to Protect Protocol Solvency

Each asset in the FluidNFT protocol has specific values related to their risk, which influences how they are supplied and borrowed. The calibration of parameters is reviewed and optimised daily based on the real-time inference of our Risk Model.&#x20;

The tables below shows summaries of the latest values.&#x20;

## Collateral Risk Parameters

### Fixed-term loans

{% hint style="info" %}
Fixed-term loan LTVs are dependent on duration and do not incur forced liquidations.
{% endhint %}

<table><thead><tr><th width="159">Collateral Tier</th><th>7 Day LTV</th><th>30 Day LTV</th><th>90 Day LTV</th><th width="133">Grace Period</th><th>Liquidation Bonus</th><th>Reserve Factor</th></tr></thead><tbody><tr><td>Blue Chips</td><td>85%</td><td>75%</td><td>70%</td><td>3 Days</td><td>10%</td><td>10%</td></tr><tr><td>Common</td><td>65%</td><td>55%</td><td>50%</td><td>3 Days</td><td>10%</td><td>20%</td></tr><tr><td>Exotic</td><td>45%</td><td>35%</td><td>30%</td><td>3 Days</td><td>10%</td><td>30%</td></tr><tr><td>Long Tail</td><td>25%</td><td>15%</td><td>10%</td><td>3 Days</td><td>10%</td><td>35%</td></tr></tbody></table>

### Open-ended loans

{% hint style="info" %}
Open-ended loans may be liquidated if debt rises above the Liquidation Threshold.
{% endhint %}

<table><thead><tr><th>Collateral Tier</th><th>Loan To Value</th><th width="197">Liquidation Threshold</th><th>Liquidation Bonus</th><th>Reserve Factor</th></tr></thead><tbody><tr><td>Blue Chips</td><td>70%</td><td>85%</td><td>10%</td><td>10%</td></tr><tr><td>Common</td><td>50%</td><td>75%</td><td>10%</td><td>20%</td></tr><tr><td>Exotic</td><td>30%</td><td>65%</td><td>10%</td><td>30%</td></tr><tr><td>Long Tail </td><td>10%</td><td>55%</td><td>10%</td><td>35%</td></tr></tbody></table>

## Currency Risk Parameters

<table><thead><tr><th>Currency Types</th><th>Risk Rating</th><th>Reserve Factor Multiplier</th><th data-hidden>Reserve Factor Multiplier</th></tr></thead><tbody><tr><td>Native Currencies</td><td><p>A+</p><p>A</p><p>A-</p></td><td>x1</td><td>x1</td></tr><tr><td>Stable Coins</td><td><p>A+</p><p>A</p><p>A-</p></td><td>x1</td><td>x1</td></tr><tr><td>Other Coins</td><td><p>B+</p><p>B</p><p>B-</p></td><td>x1.25</td><td>x1.25</td></tr></tbody></table>

## Risk Parameters Change

When market conditions change, risks change, and so we continuously monitor assets integrated into the protocol to quickly adapt the risk parameters when required.&#x20;

## Risk Parameters Analysis&#x20;

The risk parameters allow the protocol to mitigate market risks of collaterals and currencies supported by the protocol. Each borrowing is guaranteed by a collateral that may be subject to volatility. Sufficient margin and incentives are needed for the position to remain sufficiently collateralised in adverse market conditions. If the value of collateral falls below a threshold, an auction may be triggered to repay the outstanding and avoid the accumulation of bad debt.&#x20;

### Collateral Tiers&#x20;

The collateral tiers are based on our risk quantification criterion.&#x20;

<table><thead><tr><th width="152">Tier Name</th><th width="135" data-type="number">Tier Number</th><th width="118">Risk Rating</th><th data-hidden data-type="number">Tier Number </th><th data-hidden>Description</th><th data-hidden>Risk Ratings</th></tr></thead><tbody><tr><td>Blue Chip</td><td>1</td><td><p>A+</p><p>A</p><p>A-</p></td><td>1</td><td>Low Counterparty <code>&#x26;&#x26;</code> Low Market Risk</td><td><p>A+</p><p>A</p><p>A-</p></td></tr><tr><td>Common</td><td>2</td><td><p>B+</p><p>B</p><p>B-</p></td><td>2</td><td>High Counterparty <code>||</code> High Market Risk</td><td><p>B+</p><p>B</p><p>B-</p></td></tr><tr><td>Exotic</td><td>3</td><td><p>C+</p><p>C</p><p>C-</p></td><td>3</td><td>High Counterparty <code>&#x26;&#x26;</code> High Market Risk</td><td><p>C+</p><p>CC-</p></td></tr><tr><td>Long Tail</td><td>4</td><td><p>D+</p><p>D</p><p>D-</p></td><td>null</td><td></td><td></td></tr></tbody></table>

### Loan To Value

The Loan To Value (LTV) ratio defines the maximum amount of an asset that can be borrowed with a specific collateral. It is expressed as a percentage. For example, at LTV=75%, for every 1 ETH worth of collateral, borrowers will be able to borrow 0.75 ETH worth of the corresponding asset. Once a borrow is taken, the LTV evolves with market conditions.&#x20;

{% hint style="info" %}
For each wallet the maximum LTV is calculate as the weighted average of the LTVs of the collateral assets and their value:

$$Max LTV = \frac{ \sum{Collateral\_i : in : ETH : \times : LTV\_i}}{Total : Collateral : in : ETH :}$$
{% endhint %}

### Liquidation Threshold

{% hint style="info" %}
Liquidation Thresholds are relevant for open-ended loans only. Borrowers of fixed-term loans do not risk potential forced liquidations due to market conditions.
{% endhint %}

The liquidation threshold is a percentage at which a position is defined as undercollateralised. For example, a Liquidation Threshold of 80% means that if the value rises above 80% of the collateral, the position is undercollateralised and could be liquidated.

The delta between the Loan To Value and the Liquidation Threshold is a safety cushion for borrowers.

{% hint style="info" %}
For each wallet the Liquidation Threshold is calculate as the weighted average of the Liquidation Thresholds of the collateral assets and their value:

$$Liquidation : Threshold= \frac{ \sum{Collateral\_i : in : ETH : \times : Liquidation : Threshold\_i}}{Total : Collateral : in : ETH :}$$
{% endhint %}

### Liquidation Bonus

Bonus on the price of the collateral when a bidder purchases it as part of a liquidation auction of a defaulted borrow position; this is one that has passed threshold (or passed its maturity).

### Health Factor&#x20;

{% hint style="info" %}
Similar to Liquidation Thresholds, Health Factors are relevant for open-ended loans only.&#x20;
{% endhint %}

For each borrow, these risk parameters enable the calculation of the health factor: $$H\_f= \frac{ \sum{Collateral\_i : in : ETH : \times : Liquidation : Threshold\_i}}{Total : Collateral : in : ETH :}$$

When$$H\_f < 1$$ the position may be liquidated via a liquidation auction to protect the reserve against bad debt.&#x20;

### Reserve Factor

The reserve factor allocates a share of the protocol's interests. This is to sustain protocol activities and pay protocol contributors. These include creators of listed collaterals who receive half of all protocol fees in the form of royalty payments.&#x20;

### From Risks to Risk Parameters

Market risks have the most direct impact on the risk parameters:&#x20;

#### **Liquidity**&#x20;

Liquidity is based on the volume in the markets, which is key for the liquidation auction process. This can be mitigated through liquidation parameters: the lower the liquidity, the higher the incentives.

#### **Volatility**

Volatility of price can negatively affect the collateral which safeguards the solvency of the protocol and must cover the liabilities. The risk of the collateral falling below the borrowed amounts is mitigated through the level of coverage required, the Loan To Value. It also affects the liquidation auction process as the margin for liquidators needs to allow for profit.&#x20;

**Market Capitalisation**

Market capitalisation represents the size of the market, which is important when it comes to liquidating collateral. This can be mitigated through the liquidation parameters: the smaller the market cap, the higher the incentives.

**Overall Risk**

The overall risk rating is used to calibrate the Reserve Factor with factors ranging from 10% for the less risky assets to 35% for the riskiest.

## Liquidity Risk

### Introduction

FluidNFT is a liquidity protocol that enables borrowers to use their NFTs as collateral for a loan of digital currencies, and lenders to earn yield by depositing their currencies in lending pools.

Lenders receive fTokens, in exchange for digital currency deposits, and exchange these fTokens for the underlying currency to recover their initial deposit plus any accrued yield.&#x20;

If at any point in time, there is insufficient liquidity within the protocol to redeem fTokens for the underlying currency asset this would affect business-as-usual operations, and lenders would have to wait for loans to be repaid before being able to retrieve their capital.&#x20;

### Borrow Interest Rate

{% hint style="info" %}
Liquidity Risk is mitigated through the borrow interest rate model
{% endhint %}

FluidNFT's interest rate model is calibrated to manage liquidity risk and optimise utilisation. The borrow interest rates come from the Utilisation Rate $$U$$:

$$U = TotalBorrows   /    TotalLiquidity$$

$$U$$ is an indicator of the availability of capital in the pool. The interest rate model is used to manage liquidity risk through user incentivises to support liquidity:

* When capital is available: low interest rates to encourage loans.
* When capital is scarce: high interest rates to encourage repayments of loans and additional deposits.

### Interest Rate Model

Liquidity risk materialises when utilisation is high, its becomes more problematic as $$U$$ gets closer to 100%. To tailor the model to this constraint, the interest rate curve is split in two parts around an optimal utilisation rate $$U\_{optimal}$$. Before  $$U\_{optimal}$$the slope is small, after it starts rising sharply.

The interest rate $$R\_t$$ ​follows the model: ​ \
$$if \hspace{1mm} U < U\_{optimal}: \hspace{1cm} R\_t = R\_0 + \frac{U\_t}{U\_{optimal}} R\_{slope1}$$

$$​ if \hspace{1mm} U \geq U\_{optimal}: \hspace{1cm} R\_t = R\_0 + R\_{slope1} + \frac{U\_t-U\_{optimal}}{1-U\_{optimal}}R\_{slope2}$$

​In the borrow rate technical implementation, the `calculateCompoundInterest` method relies on an approximation that mostly affects high interest rates. The resulting actual borrow rate is:

$$Actual APY = (1+Theoretical APY/secs per year)^{secsperyear}-1$$

{% hint style="info" %}

* **Open-Ended Loans** use variable interest rate models
* **Fixed-Term Loans** use stable interest rate models
  {% endhint %}

Both the variable and stable interest models, are derived from the formula above with different parameters for each asset.

* When $$U < U\_{optimal}$$ the borrow interest rates increase slowly with utilisation
* When $$U \geq  U\_{optimal}$$ the borrow interest rates increase sharply with utilisation to above 100% APY if the liquidity is fully utilised.

Variable loans see their rate constantly evolving with utilisation. This means they are not ideal for financial planning.&#x20;

Hence stable loans, that maintain their interest rate at issuance and only change on rebalancing.&#x20;

### Model Parameters

Interest rate parameters have been calibrated per Collateral Tier. More volatile assets, such as the Tail End, require a low Optimal Utilisation rate typically calibrated around 45%.&#x20;

It is also key to consider market conditions: how can the borrowed asset be used in the current market? FluidNFT's borrowing costs must be aligned with market yield opportunities or there would be a rate arbitrage with rational users being incentivised to borrow all the liquidity on FluidNFT to take advantage of higher yield opportunities.&#x20;

When market conditions change, the interest rate parameters can be adapted. These changes must adapt to utilisation on FluidNFT's market as well as incentives across DeFi.&#x20;


# Risk Monitoring

Protecting Protocol Solvency through Evolving (& Volatile) Market Conditions

FluidNFT continuously monitors key metrics to enable timely data-driven decision making. These are used to classify the risk quantification of new loans as well as to make risk management decisions in response to black swan events and / or evolving market conditions.&#x20;

## Metrics

<table><thead><tr><th width="225">Metric</th><th>Description</th></tr></thead><tbody><tr><td>Real-Time Appraisals</td><td>Floor, trait and token-level real-time appraisals of all supported NFT collections. </td></tr><tr><td>Recovery Rates</td><td>Forward-looking estimates to predict the future collaterlisation of an NFT-backed loan, and the potential loss in case of default.</td></tr><tr><td>Default Probability</td><td>A model to factor in the probability of a borrower defaulting on their loan; i.e. the likelihood of the protocol having to liquidate. </td></tr><tr><td>Wallet Analytics</td><td>Borrowing collector risk-profile analysis based on their past wallet activity, loan repayments, and current capitalisation. </td></tr><tr><td>Sentiment Scores</td><td>Scoring the positive / negative attitudes and opinions of both aggregated &#x26; targeted social profiles about specific collections.</td></tr><tr><td>Liquidity Scores</td><td>A measure of the ease with which an NFT can be bought or sold in the market without affecting its price. </td></tr></tbody></table>


# Price Discovery

NFT Price Oracles to Accurately Support even Long-Tail NFT Collections

## NFT Appraisals

FluidNFT provides real-time appraisals to construct loan terms. This enables our protocol to offer the best competitive in-the-moment loan terms for any collateral while mitigating risk. This means that people borrowing against higher-value NFTs will be able to take out larger loans.

## Price Update Strategy

Currency price update frequency follows a margin method, in which prices are refreshed every time the deviation crosses a certain threshold. We use Chainlink's decentralised oracles for the currency feeds. We use a proprietary NFT Price Oracle for collateral pricing. This is a trust-minimised solution designed to support even the long tail of NFTs. Similarly, prices are refreshed every time the deviation crosses a certain threshold, and/or when a tailored appraisal is requested.


# Recovery / Liquidation

Targeting 90% Borrower Recovery while Protecting Protocol Solvency

The dual goal of the recovery process is to protect protocol solvency while ensuring the maximum recovery possible for the owner of the underlying collateral.&#x20;

## Recovery Triggers

FluidNFT's recovery process relies on third parties, acting in their own self-interest, to trigger recoveries on defaulted loans. Their incentive being 1% of the auction price. &#x20;

### Fixed-Term Loans

Fixed-term loan recoveries may be triggered if & when a borrower fails to repay an outstanding loan before the end of the grace period.

### Open-Ended Loans

Open-Ended loan recoveries may be triggered if & when a borrower's loan becomes undercollateralised.&#x20;

## Recovery Process

### Step-By-Step

<table><thead><tr><th width="170.33333333333331">Recovery Stage</th><th width="132">Loan Type</th><th width="109">Duration </th><th>Description</th></tr></thead><tbody><tr><td>Grace Period</td><td><p>Fixed-Term</p><p></p><p>Open-Ended</p></td><td><p>72 hours</p><p></p><p>24 hours</p></td><td>Borrowers can still avoid collateral loss by repaying the outstanding loan principal plus accrued interest, in addition to a default fee.</td></tr><tr><td>Dutch Auction</td><td>All</td><td>24 hours</td><td>If no repayment is made, the underlying collateral goes into a price decreasing; Dutch auction. With a significant  discount to the current price available to lenders of the corresponding pool.</td></tr></tbody></table>

### 90% Borrower Recovery

To compensate for the collateral loss, and as insurance against losing significant value as a result of interacting with the FluidNFT protocol: all auction proceeds minus the outstanding loan balance and a liquidation fee go to the original owner.&#x20;

In a fair and liquid market, with a 10% liquidation fee (for example), this should equate to the borrower effectively selling their NFT for 10% below market value, rather than a complete loss.


# Protocol Overview

FluidNFT Protocol V1

FluidNFT Protocol V1 is deployed as a peer-to-pool (P2Pool) NFT Lending protocol. This is a decentralised, non-custodial protocol designed to democratise NFT lending for any collection.

<figure><img src="/files/kq6UPBKdThMBApHyUXpj" alt=""><figcaption><p>System Diagram</p></figcaption></figure>

## Main Contracts

The main contracts in FluidNFT Protocol V1 and their purposes are:&#x20;

### LendingPool

The main entry point into the FluidNFT Protocol. Most interactions with FluidNFT will happen via the LendingPool, including:

* [deposit()](/technical-resources/developers/contract-reference/lendingpool#deposit)
* [batchDeposit()](/technical-resources/developers/contract-reference/lendingpool#batchdeposit)
* [withdraw()](/technical-resources/developers/contract-reference/lendingpool#withdraw)
* [batchWithdraw()](/technical-resources/developers/contract-reference/lendingpool#batchwithdraw)
* [borrow()](/technical-resources/developers/contract-reference/lendingpool#borrow)
* [batchBorrow()](/technical-resources/developers/contract-reference/lendingpool#batchborrow)
* [repay()](/technical-resources/developers/contract-reference/lendingpool#repay)
* [batchRepay()](/technical-resources/developers/contract-reference/lendingpool#batchrepay)
* [refinance()](/technical-resources/developers/contract-reference/lendingpool#refinance)
* [batchRefinance()](/technical-resources/developers/contract-reference/lendingpool#batchrefinance)
* [auction()](/technical-resources/developers/contract-reference/lendingpool#auction)
* [batchAuction()](/technical-resources/developers/contract-reference/lendingpool#batchauction)
* [bid()](/technical-resources/developers/contract-reference/lendingpool#bid)
* [batchBid()](/technical-resources/developers/contract-reference/lendingpool#batchbid)

### AddressProvider

The main address register of the protocol, for particular markets. The latest contract addresses should be retrieved from this contract by making the appropriate calls.&#x20;

### AddressProviderRegistry

Contains a list of active `AddressProvider` addresses, for different markets.

### fTokens

The yield-generating, tokenised deposits used throughout the FluidNFT protocol. They implement most of the standard EIP-20/ERC20 token methods with slight modifications, as well as FluidNFT specific methods including:

* [scaledBalanceOf()](/technical-resources/developers/contract-reference/f-tokens#scaledbalanceof)
* [getScaledUserBalanceAndSupply()](/technical-resources/developers/contract-reference/f-tokens#getscaleduserbalanceandsupply)
* [scaledTotalSupply()](/technical-resources/developers/contract-reference/f-tokens#scaledtotalsupply)

All fTokens also implement EIP-2612, which via the `permit()` function enables gas-less transfers and single transaction approve + actions.

### Stable and Variable Debt Tokens

The tokenised borrow positions used throughout the FluidNFT protocol. Most of the standard EIP-20/ERC20 methods are disabled, since debt tokens are non-transferrable.&#x20;

For more information, see the Debt Tokens section.&#x20;

### Supporting Contracts

The following contracts should generally not be interacted with directly, but are used throughout the FluidNFT protocol via contract calls.&#x20;

#### Collateral Manager

Implements actions involving the management of collateral in the protocol, including:

* [createBorrow()](/technical-resources/developers/contract-reference/collateral-manager#functionality-1)
* [updateBorrow()](/technical-resources/developers/contract-reference/collateral-manager#functionality-2)
* [repayBorrow()](/technical-resources/developers/contract-reference/collateral-manager#functionality-3)
* [refinanceBorrow()](/technical-resources/developers/contract-reference/collateral-manager#functionality-4)
* [setBorrowAuctionCall()](/technical-resources/developers/contract-reference/collateral-manager#functionality-6)
* [liquidateBorrow()](/technical-resources/developers/contract-reference/collateral-manager#functionality-5)

The above functions should only be called via the main `LendingPool` contract.

#### Configurator

Provides configuration functions for the `LendingPool` contracts. It also has a number of important functions:&#x20;

* Activates / Deactivated reserves
* Enables / Disables borrowing for a reserve
* Enables / Disables using an NFT as collateral
* Enables / Disables variable rate borrowing for a reserve
* Freezes / Unfreezes reserves
* Updates a reserves's Loan-to-Value(s)
* Updates a reserve's liquidation threshold
* Updates a reserve's liquidation bonus
* Updates a reserve's grace period(s)
* Updates a reserve's auction duration
* Updates a reserve's interest rate strategy address
* Activates / Deactivates all functions of a LendingPool in emergencies

For all of the above functions, relevant events are emitted to the blockchain. Anyone can monitor these changes to know when values have been modified or added/removed.

#### Interest Rate Strategy

Holds the information needed to calculate and update the interest rates of specific reserves.

Each contract stores the optimised base curves using the corresponding parameters of each currency. This means that there is a mathematical function which determines the interest rate of each asset pool, with interest rates able to change based on the amount of borrowed funds and the total liquidity (i.e. utilisation) of each reserve asset pool.

The parameters for the optimised base curves are:&#x20;

* `baseVariableBorrowRate`
* `variableRateSlope1`
* `variableRateSlope2`
* `stableRateSlope1`
* `stableRateSlope2`

The interest rates are calculated depending on the available liquidity and the total borrowed amount.

#### NFT Price Oracle

A trust-minimised proprietary oracle designed to optimise trust-minimisation and update costs; operating at approximately 20% of the cost of integration with Chainlink, with support for any collection, trait and tailored token-level pricing.

#### Obligation Receipts[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/architecture#obligation-receipts) <a href="#obligation-receipts" id="obligation-receipts"></a>

Obligation Receipts are smart redeemable NFTs that grant the holder rights to the underlying collateral of a loan once its associated debt balance has been repaid. These can be freely held, sold or transferred.

#### Library Contracts

Various libraries are also used throughout the FluidNFT Protocol (to be made available in our Github).&#x20;

## Risk Mitigation Strategies

Due to the nascency of the space, FluidNFT has been designed to support even the most volatile assets. This requires a few constructs at the protocol level. These are as follows:

### Isolation Pools

Isolation pools are used to protect against risk contagion from one collateral or asset effecting lender funds in other pools. These are lending pools that restrict reserves to one single collateral-asset pair and are fundamental to our risk model and protocol design.

### Dutch Liquidity Auctions

In the case of loans going into default, outside of the grace period, liquidation auctions may be called to avoid bad debt accumulating to the pool. We use Dutch auctions to avoid potential liquidation cascades by potentially flooding the market with below-floor NFTs. In addition, to avoid MEV attacks, lenders receive a significant discount to the current Dutch auction price.&#x20;


# Whitepaper

FluidNFT Protocol V1

Here we present FluidNFT, an NFT lending protocol designed to democratise capital efficient borrowing and lending against any NFT. The purpose of this White Paper is to describe how FluidNFT works and how it's being used to pioneer "The Creator Economy 2.0".

<img src="/files/b69zUU9N5imw7ZBSbOge" alt="" data-size="original">

### 1. The Creator Economy 2.0[​](https://docs-fluidnft.vercel.app/docs/whitepaper#1-introduction) <a href="#id-1-introduction" id="id-1-introduction"></a>

In a world where secondary market royalties are trending to zero we believe NFT lending royalties create a more sustainable model for creators and collectors to align capital and incentives around a shared mission and prosper together.&#x20;

#### 1.1. NFT lending royalties

FluidNFT defines "NFT lending royalties" as half of all protocol fees; shared with the creator.

#### 1.2. Community-Owned Liquidity

Creators are able to maximise revenue by providing this utility to their community themselves; depositing liquidity to receive both interest and royalty payments.

### 2. Democratising Access to NFT lending[​](https://docs-fluidnft.vercel.app/docs/whitepaper#2-permissionless-listings) <a href="#id-2-permissionless-listings" id="id-2-permissionless-listings"></a>

If NFTs are to succeed as a long-term asset class, unlocking liquidity and improving lending and borrowing infrastructure must go hand in hand \[[1](#proof-deep-dive-005-lending-and-borrowing)].&#x20;

Existing NFT liquidity protocols were not designed to manage the risks associated with the most illiquid and / or volatile assets. FluidNFT is designed to enable capital efficient lending and borrowing against any asset; from Blue Chips to the Long Tail.&#x20;

### 3. Instant Lending and Borrowing

FluidNFT Protocol V1 is deployed as a Peer-to-Pool (P2Pool) NFT lending protocol.&#x20;

Lenders deposit fungible (ERC20) tokens into lending pools for instant yield. Borrowers collateralise their limited (ERC721) or open edition (ERC1155) NFTs for instant liquidity.

#### 3.1 Tokenised Balances

Lenders to lending pools receive interest-bearing ERC20 fTokens which can be redeemed for the underlying assets in the pool at any time (similar to AAVE's aTokens \[[2](#aave-atokens)]).

#### 3.2 Tokenised Debts

Borrowers from lending pools receive interest-accruing ERC20-compliant dTokens that can be burned at any time on repayment of the debt. These debt tokens are non-transferrable.

### 4. Pro-Rata Loans with Perpetual Refinancing <a href="#id-4-capital-efficiency" id="id-4-capital-efficiency"></a>

FluidNFT loan durations can be fixed-term with perpetual refinancing, or open-ended.&#x20;

#### 4.1. Pro-Rata Interest

All FluidNFT loans accrue interest pro-rata. Borrowers pay interest only for the duration of the loan and save money by repaying loans early. This means borrowers can de-risk by taking out loans at a longer-term duration than they need without incurring any additional expense.

#### 4.2. Fixed-Term Loans

Fixed-term loans may be repaid or refinanced anytime before maturity. After the maturity date there is a grace period where borrowers can repay or refinance their loan by paying an additional fee. After the grace period a liquidation auction may be triggered.&#x20;

#### 4.3. Perpetual Refinancing

Fixed-term loans can be perpetually refinanced anytime before maturity. Borrowers simply stipulate the new loan amount and maturity, with the option to partially repay their balance or borrow more against their collateral.

#### 4.4. Open-Ended Loans

Open-ended loans have no maturity date but may be force liquidated should they become undercollateralised. A buffer between the maximum LTV and Liquidation Threshold is maintained to help users manage this risk. Notifications also warn users of when they are at risk of liquidation.

### 5. Capital Efficiency[​](https://docs-fluidnft.vercel.app/docs/whitepaper#4-capital-efficiency) <a href="#id-4-capital-efficiency" id="id-4-capital-efficiency"></a>

FluidNFT Protocol V1 is deployed as a P2Pool protocol to enable instant borrowing and lending. Our proprietary NFT Price Oracle supports floor-based, trait-based and tailored NFT pricing for any collection. This greatly increases the amount of capital that can be borrowed; especially against rarer NFTs. By enabling fixed-term loans with perpetual refinancing, we are able to maximise LTVs in accordance with current market conditions while mitigating the risk of accruing bad debt via defaults.  &#x20;

### 6. Risk Management

#### 6.1 Isolation Pools

Permissionless listings within P2Pool models risk contagion; that bad debt against one collateral will affect the liquidity available across others. As we've seen with BAYC in the summer of '22, even blue chip NFTs are not immune to price manipulation \[[3](#bayc-price-manipulation)]. Isolation pools enable liquidity against a single collateral-asset pair and limit downside risk solely to funds within each pool.

Isolation pools can be used by NFT creators, collection and lending DAOs to provide the utility of instant loans to their members as an additional revenue stream post-royalties through yield generation, and/or limit exposure to foreclosure against projects other than their own.[​](https://docs-fluidnft.vercel.app/docs/whitepaper#9-interest-rates)

#### 6.2. Interest Rate Model[​](https://docs-fluidnft.vercel.app/docs/whitepaper#91-interest-rate-model) <a href="#id-91-interest-rate-model" id="id-91-interest-rate-model"></a>

FluidNFT uses the standard kink (piecewise linear) model to manage liquidity risk and optimise utilisation. Parameters for each collateral-asset pair are calibrated independently to manage specific risks and incentivise liquidity within each pool \[[4](#aave-interest-rate-model)].

#### 6.3 MEV Resistant Liquidations

A liquidation can be triggered when an open-ended loan is no longer overcollateralised or when s fixed-term loan maturity grace period expires. Within a liquidation auction there are multiple actors to consider; together with their own risks and incentives.

The majority of NFT-Fi liquidations currently use high-bid-wins; English auctions. Liquidation auctions are triggered only after a user deposits the amount of outstanding debt as the first bid. This is then staked for the duration of the auction or until this user is outbid. Issues can arise when a lack of bidding results in below-market liquidations that further drive down prices causing a cascade of liquidations and the accumulation of bad debt. \[[5](#metaversal-p2pool-lending-death-spiral)]

FluidNFT uses Discounted Dutch Auctions to provide resistance to this, similar to the approach from Euler \[[6](#euler-mev-resistant-liquidations)]. Discount rates are proportional to a lender's deposits which helps retain value within the protocol and disincentivises external price manipulation. By removing the requirement for staking against the amount of outstanding debt, liquidation bonuses can be kept low as users no longer risk locking capital within an untradable position.&#x20;

#### 6.4 Borrower Liquidation Protection

Discounted Dutch auction start at a price many times more than the current valuation. This ensures the best possible auction sale price; to factor in any potential rarity not factored within our oracle.&#x20;

Liquidation bonuses default to 10% meaning that 90% of the auction sale price (minus the outstanding debt) is transferred back to the borrower; that the borrower doesn't lose ownership without reasonable compensation, as occurs in existing NFT lending protocols.&#x20;

### 7. Composability & Interoperability[​](https://docs-fluidnft.vercel.app/docs/whitepaper#5-composability--interoperability) <a href="#id-5-composability--interoperability" id="id-5-composability--interoperability"></a>

#### 7.1 Obligation Receipts

Borrowers receive ERC721 Obligation Receipts on execution. These give the bearer the right to retrieve the underlying collateral on loan repayment.&#x20;

Obligation Receipts can be freely owned, transferred and traded.

#### 7.2 Liquid Delegates

Delegation rights of the underlying NFT are set to the owner on mint, can be delegated to alternative accounts by the owner; which are reset to the new owner on transfer.

This is achieved through integration with Delegate Cash \[[7](#delegate-cash)].

### 8. Trust-Minimised Oracles[​](https://docs-fluidnft.vercel.app/docs/whitepaper#6-trust-minimized-oracles) <a href="#id-6-trust-minimized-oracles" id="id-6-trust-minimized-oracles"></a>

FluidNFT uses oracles to determine the amount of currency that can be borrowed against NFTs used as collateral and ensuring positions are sufficiently overcollateralised.&#x20;

#### 8.1. Trust-Minimised[​](https://docs-fluidnft.vercel.app/docs/whitepaper#61-trust-minimized) <a href="#id-61-trust-minimized" id="id-61-trust-minimized"></a>

FluidNFT uses a trust-minimised method for accessing off-chain data on-chain \[[8](#trustus-trust-minimized-off-chain-data-on-chain)]. Bit-shift operations are used in combination with price delta updates to minimise storage and transaction costs, and enable pricing for any collection at a fraction of the price of existing solutions, that is not limited to their current coverage (focused on Blue Chips).&#x20;

#### 8.2.  Floor, Trait and Token-Level Oracle Pricing[​](https://docs-fluidnft.vercel.app/docs/whitepaper#63-price-feeds) <a href="#id-63-price-feeds" id="id-63-price-feeds"></a>

Our NFT Pricing Oracle provides support at the collection-floor, trait and token-level. It can be scaled to any project from the Blue Chip to the Long Tail.

### 9. Token Bound Accounts <a href="#id-12-acknowledgments" id="id-12-acknowledgments"></a>

FluidNFT supports ERC6551 token bound accounts \[[9](#eip-6551-token-bound-accounts)]. These are used to enable loan bundles; borrowing against an NFT and all the NFTs held within its token-bound account a.k.a. inventory.

This has the additional benefit of being able use additional collateral to resolve an open-ended loan collateral deficit, should the borrower be NFT rich but ETH poor.

### 10. Acknowledgments[​](https://docs-fluidnft.vercel.app/docs/whitepaper#12-acknowledgments) <a href="#id-12-acknowledgments" id="id-12-acknowledgments"></a>

With special thanks to the teams behind AAVE and Euler. FluidNFT's initial architectural design was based on AAVE and adopts some of the code. Subsequent improvements to enable permissionless listings, long-tail asset support, and the construction of configurable execution strategies were inspired by Euler. We are very grateful for their pioneering work in DeFi.

### 11. References <a href="#id-12-acknowledgments" id="id-12-acknowledgments"></a>

1. #### [PROOF - Deep Dive 005 - Lending & Borrowing](https://docs.proof.xyz/research/deep-dives/005)
2. #### [AAVE - aTokens](https://docs.aave.com/developers/tokens/atoken)
3. #### [BAYC - Price manipulation](https://medium.com/huobi-research/the-reason-for-bayc-price-fall-1be26bd6c074)
4. #### [AAVE - Interest Rate Model](https://docs.aave.com/risk/v/master/liquidity-risk/borrow-interest-rate#interest-rate-model)
5. #### [Metaversal - P2Pool lending death spiral](https://twitter.com/JamesonMah/status/1630627531727699973?s=20)
6. #### [Euler - MEV-resistant liquidations](https://www.euler.finance/blog/eulers-innovative-liquidation-engine)
7. #### [Delegate Cash - NFT rights delegation](https://delegate.xyz/) &#x20;
8. #### [Trustus - Trust-minimized off-chain data on-chain](https://github.com/ZeframLou/trustus)
9. #### [EIP-6551 - Token Bound Accounts](https://eips.ethereum.org/EIPS/eip-6551)


# Security

{% content-ref url="/pages/nEsNvo9qqXFMY3gpfP6v" %}
[Audits](/technical-resources/security/audits)
{% endcontent-ref %}

{% content-ref url="/pages/AEDhRpNUVwefgdWTH1yq" %}
[Test Report](/technical-resources/security/test-report)
{% endcontent-ref %}


# Audits

Coming soon


# Test Report

Coming soon


# Developers

{% content-ref url="/pages/sQKFMNSTEO6zDdEx1TAa" %}
[Contract Integration](/technical-resources/developers/contract-integration)
{% endcontent-ref %}

{% content-ref url="/pages/qxccreBd3JXEgduzqmvv" %}
[Contract Reference](/technical-resources/developers/contract-reference)
{% endcontent-ref %}

{% content-ref url="/pages/cuI9faw2pTuhhtcpRFvC" %}
[SDK](/technical-resources/developers/sdk)
{% endcontent-ref %}

{% content-ref url="/pages/KoSX2iT5roZ5WGAfK7u0" %}
[Subgraph](/technical-resources/developers/subgraph)
{% endcontent-ref %}


# Contract Integration

Find out how to start working with FluidNFT smart contracts.

Modules[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-integration-guide#modules)

The FluidNFT protocol is a collection of smart contracts connected via a modular system. Each module handles a specific aspect of the protocol. Depending on your use case you may need to interact with several different contract addresses.

Some modules are global, for example:

* `ExecutionDelegate`: Grant ERC20, ERC721 & ERC1155 token access across the protocol
* `ExecutionManager`: Batch requests to save on gas
* `LendingPool`: Execute peer-to-pool transactions
* `Lending`: Execute peer-to-peer transactions

Some modules are asset-specific, for example:

* `fTokens`: Incentivised ERC-20 tokens that represent assets
* `stableDebtTokens`: Incentivised ERC-20 tokens that represent stable interest rate liabilities
* `variablDebtTokens`: Incentivised ERC-20 tokens representing variable interest rate liabilities

### Execution[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-integration-guide#execution) <a href="#execution" id="execution"></a>

As it may be beneficial to batch requests to save on gas all modules can be called using the optional `ExecutionManager`.

Example of depositing into a lending pool with the execution manager:

```
// Use the lending pool module:
ILendingPool lendingPool = ILendingPool(LENDING_POOL);

// Deposit asset tokens into a pool
lendingPool.deposit(amount, reserveId, onBehalfOf, referralCode);
```

Without the execution manager:

```
// Use the execution manager module
IExecutionManager executionManager = IExecutionManager(EXECUTION_MANAGER);

// Instantiate the lending pool module to access the selector:
ILendingPool lendingPool = ILendingPool(LENDING_POOL);

// Deposit asset tokens into a pool
executionManager.call(
    LENDING_POOL, 
    abi.encodeWithSelector(
        lendingPool.deposit.selector,
        amount, 
        reserveId,
        onBehalfOf,
        referralCode
    )
);
```

Note the `ExecutionManager` supports both `.call()` and `.multiCall()` functionality, for batch execution.

The remainder of this document details how to integrate without the execution module, for the sake of brevity.

### P2Pool[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-integration-guide#p2pool) <a href="#p2pool" id="p2pool"></a>

Core peer-to-pool operations.

#### Deposit and withdraw[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-integration-guide#deposit-and-withdraw) <a href="#deposit-and-withdraw" id="deposit-and-withdraw"></a>

In order to earn passive yield, you need to `deposit` into a lending pool.

```
// Approve the execution delelgate contract to pull your tokens:
IERC20(asset).approve(EXECUTION_DELEGATE, type(uint).max);

// Use the lending pool module:
ILendingPool lendingPool = ILendingPool(LENDING_POOL);

// Get the default reserve id for a given collateral-asset pair
// "collateral" is the NFT contract address, e.g. 0x7bd29408f11d2bfc23c34f18275bbf23bb716bc7 for Meebits
// "asset" is the asset contract address, e.g. 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 for WETH (Wrapped Ether)
// "maxTokenId" is the maxTokenId for the collection, e.g. 19999 for Meebits
// "minTokenId" is the minTokenId for the collection, e.g. 0 for Meebits
lendingPool.getReserveId(collateral, asset, maxTokenId, minTokenId);

// Deposit asset tokens into the pool
// "amount" the amount of asset tokens, e.g. 12.5e18 (assuming 18 decimal places)
// "reserveId" the id of the reserve, e.g. "1" (returned in previous call)
// "onBehalfOf" enables the deposit to be initiated from a seperate account, or use address(this) for the same account
// "referralCode" is used for fee sharing with our partners, or 0 for none
lendingPool.deposit(amount, reserveId, onBehalfOf, referralCode);
```

Use the fToken reserve to check balances.

```
// Retrieve fToken address
lendingPool.getConfiguration(reserveId).fTokenAddress;

// Use the fToken
IFToken fToken = IFToken(fTokenAddress);

// Retreive the user's balance + interest 
// Grows each block, assuming there are borrowers to generate yield
fToken.balanceOf(address(this));

// Retreive the user's deposit amount
// Internal book-keeping amount that doesn't change in time
fToken.scaledBalanceOf(address(this));
```

You can `withdraw` at anytime to retrieve your funds.

```
// Withdraw asset tokens from the pool
// "amount" the amount of asset tokens, e.g. type(uint256).max to retrieve all deposits plus interest
// "reserveId" the id of the reserve, e.g. "1" 
// "to" enables withdrawing to seperate account, or use address(this) for the same account
lendingPool.withdraw(amount, reserveId, to);
```

#### Borrow and repay[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-integration-guide#borrow-and-repay) <a href="#borrow-and-repay" id="borrow-and-repay"></a>

To borrow an asset, you must supply collateral to be held in escrow for the duration of the loan.

```
// Approve the execution delelgate contract to pull your tokens:
IERC721(collateral).setApprovalForAll(EXECUTION_DELEGATE);

// Use the lending pool module:
ILendingPool lendingPool = ILendingPool(LENDING_POOL);

// Get the default reserve id for a given collateral-asset pair
// "collateral" is the NFT contract address, e.g. 0x7bd29408f11d2bfc23c34f18275bbf23bb716bc7 for Meebits
// "asset" is the asset contract address, e.g. 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 for WETH (Wrapped Ether)
// "maxTokenId" is the maxTokenId for the collection, e.g. 19999 for Meebits
// "minTokenId" is the minTokenId for the collection, e.g. 0 for Meebits
lendingPool.getReserveId(collateral, asset, maxTokenId, minTokenId);

// Borrow asset tokens from the pool
// "amount" the amount of asset tokens, e.g. 12.5e18 (assuming 18 decimal places)
// "tokenId" the id of the token to be used as collateral, e.g. "1" (a tokenId held in your wallet)
// "reserveId" the id of the reserve, e.g. "1" (returned in previous call)
// "onBehalfOf" enables the borrow to be initiated from a seperate account, or use address(this) for the same account
// "referralCode" is used for fee sharing with our partners, or 0 for none
lendingPool.borrow(amount, reserveId, onBehalfOf, referralCode);
```

Use the debtToken reserve to check debt balances.

```
// Retrieve debtToken address
lendingPool.getConfiguration(reserveId).debtTokenAddress;

// Use the debtToken
IDebtToken debtToken = IDebtToken(debtTokenAddress);

// Retreive the user's debt balance + interest 
// Grows each block
debtToken.balanceOf(address(this));

// Retreive the user's borrow amount
// Internal book-keeping amount that doesn't change in time
debtToken.scaledBalanceOf(address(this));
```

You can `repay` at anytime to retrieve your collateral.

```
// Repay asset tokens to the pool
// "collateral" is the NFT contract address, e.g. 0x7bd29408f11d2bfc23c34f18275bbf23bb716bc7 for Meebits
// "tokenId" the id of the token used as collateral, e.g. "1"
// "amount" the amount of asset tokens, e.g. type(uint256).max to repay the borrow amount plus interest
lendingPool.repay(collateral, tokenId, amount);
```

#### Liquidate[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-integration-guide#liquidate) <a href="#liquidate" id="liquidate"></a>

If a loan is no longer sufficiently overcollateralised, i.e. when the amount of outstanding debt exceeds the maximum loan-to-value, it can be liquidated.

The price is determined via a proprietary dynamic-Dutch auction mechanic that results in a high liquidation price when the loan is a little undercollateralised, that decays exponentially as the loan becomes more and more undercollateralised.

The liquidation price is further dependent on the asset being used to purchase the underlying collateral, with smaller and larger discounts available for their reserve's fTokens and stakedToken, respectively.

```
// Approve the execution delelgate contract to pull your tokens:
IERC20(asset).approve(EXECUTION_DELEGATE, type(uint).max);

// Use the lending pool module:
ILendingPool lendingPool = ILendingPool(LENDING_POOL);

// Liquidate an undercollateralized loan to purchase the underlying collateral at a discount
// "collateral" is the NFT contract address, e.g. 0x7bd29408f11d2bfc23c34f18275bbf23bb716bc7 for Meebits
// "tokenId" the id of the token used as collateral, e.g. "1"
// "paymentAsset" is the contract address of the amount paid to liquidate, e.g. 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 for WETH
// "paymentAmount" the amount of asset token paid to liquidate the loans, e.g. 12.5e18 (assuming 18 decimal places)
// "onBehalfOf" enables the deposit to be initiated from a seperate account, or use address(this) for the same account
lendingPool.liquidate(collateral, tokenId, paymentAsset, paymentAmount, onBehalfOf);
```


# Deployed Contracts

Coming soon


# Contract Reference

The FluidNFT protocol is composed of interconnected smart contracts organised in a modular system. Each module is responsible for specific aspects of the protocol. Therefore, depending on your desired actions, you will interact with multiple contract addresses to access the different functionalities.

```
 src
 └─ protocol
    └─ collateral
       └─ CollateralManager.sol
       └─ CollateralManagerStorage.sol
    └─ execution
       └─ ExecutionDelegate.sol
       └─ ExecutionManager.sol
    └─ gateways
       └─ WETHGateway.sol
    └─ governance
       └─ AddressProvider.sol
       └─ AddressProviderRegistry.sol
       └─ Configurator.sol
    └─ libraries
       └─ configuration
          └─ NFTPriceGroupConfiguration.sol
          └─ ReserveConfiguration.sol
       └─ helpers
          └─ Errors.sol
          └─ Helpers.sol
       └─ logic
          └─ BorrowLogic.sol
          └─ ConfigurationLogic.sol
          └─ GenericLogic.sol
          └─ LiquidateLogic.sol
          └─ OracleLogic.sol
          └─ ReserveLogic.sol
          └─ SupplyLogic.sol
          └─ ValidationLogic.sol
       └─ math
          └─ MathUtils.sol
          └─ PercentageMath.sol
          └─ WadRayMath.sol
       └─ proxy
          └─ FluidProxyAdmin.sol
          └─ FluidUpgradeableProxy.sol
       └─ types
          └─ ConfigTypes.sol
          └─ DataTypes.sol
    └─ oracle
       └─ NFTPriceOracle.sol
       └─ NFTPriceOracleStorage.sol
       └─ PriceConsumerV3.sol
       └─ Trustus.sol
    └─ p2pool
       └─ LendingPool.sol
       └─ LendingPoolStorage.sol
    └─ risk      
       └─ InterestRateStrategy.sol 
       └─ LendingRateManager.sol 
    └─ tokenization
       └─ base
           └─ DebtTokenBase.sol
           └─ IncentivizedERC20.sol
           └─ Redeemable.sol
       └─ FToken.sol
       └─ ObligationReceipt.sol  
       └─ StableDebtToken.sol  
       └─ VariableDebtToken.sol  
```


# Collateral Manager

The `CollateralManager` contract manages loans and their underlying collateral. It is accessible only by the LendingPool contract and is responsible for the deposit/withdraw of collateral to open/close positions.

## Methods <a href="#functionality" id="functionality"></a>

### createBorrow() <a href="#functionality" id="functionality"></a>

**`function createBorrow(address initiator, address onBehalfOf, address collateral, uint256 tokenId, uint256 tokenValue, address asset, uint256 amount, uint256 duration, uint256 borrowIndex, uint256 reserveId)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Deposits NFT(s) in escrow and creates a borrow position.

<table><thead><tr><th width="227.33333333333331">Parameter Name</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code>initiator</code></td><td>address</td><td>address of the initiator of the transaction</td></tr><tr><td><code>onBehalfOf</code></td><td>address</td><td>address to receive the loan</td></tr><tr><td><code>collateral</code></td><td>address</td><td>address of the NFT to be used as collateral</td></tr><tr><td><code>tokenId</code></td><td>uint256</td><td>tokenId of the NFT to be used as collateral</td></tr><tr><td><code>tokenValue</code></td><td>uint256</td><td>amount of ERC1155 tokens to be used, 0 if ERC721</td></tr><tr><td><code>asset</code></td><td>address</td><td>address of currency to be borrowed</td></tr><tr><td><code>amount</code></td><td>uint256</td><td>amount of currency to be borrowed</td></tr><tr><td><code>duration</code></td><td>uint256</td><td>duration of the loan</td></tr><tr><td><code>borrowIndex</code></td><td>uint256</td><td>the current borrow index</td></tr><tr><td><code>reserveId</code></td><td>uint256</td><td>id of the target reserve</td></tr></tbody></table>

### updateBorrow() <a href="#functionality" id="functionality"></a>

**`function updateBorrow(address initiator, uint256 borrowId, uint256 amountAdded, uint256 amountTaken, uint256 borrowIndex)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Updates a borrow position.

<table><thead><tr><th width="227.33333333333331">Parameter Name</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code>initiator</code></td><td>address</td><td>address of the initiator of the transaction</td></tr><tr><td><code>borrowId</code></td><td>uint256</td><td>id of the targeted borrow</td></tr><tr><td><code>amountAdded</code></td><td>uint256</td><td>amount of currency added to the borrow position</td></tr><tr><td><code>amountTaken</code></td><td>uint256</td><td>amount of currency taken from the borrow position</td></tr><tr><td><code>borrowIndex</code></td><td>uint256</td><td>the current borrow index</td></tr></tbody></table>

### repayBorrow() <a href="#functionality" id="functionality"></a>

**`function repayBorrow(address initiator, uint256 borrowId, uint256 amount, uint256 borrowIndex)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Repays a borrow position to retrieve the underlying collateral.

<table><thead><tr><th width="227.33333333333331">Parameter Name</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code>initiator</code></td><td>address</td><td>address of the initiator of the transaction</td></tr><tr><td><code>borrowId</code></td><td>uint256</td><td>id of the targeted borrow</td></tr><tr><td><code>amount</code></td><td>uint256</td><td>amount of currency to repay the borrow position</td></tr><tr><td><code>borrowIndex</code></td><td>uint256</td><td>the current borrow index</td></tr></tbody></table>

### refinanceBorrow() <a href="#functionality" id="functionality"></a>

**`function refinanceBorrow(address initiator, uint256 borrowId, uint256 borrowAmount, uint256 amountAdded, uint256 amountTaken, uint256 duration)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Refinances a borrow position.

<table><thead><tr><th width="227.33333333333331">Parameter Name</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code>initiator</code></td><td>address</td><td>address of the initiator of the transaction</td></tr><tr><td><code>borrowId</code></td><td>uint256</td><td>id of the targeted borrow</td></tr><tr><td><code>borrowAmount</code></td><td>uint256</td><td>current borrow position</td></tr><tr><td><code>amountAdded</code></td><td>uint256</td><td>amount of currency added to the borrow position</td></tr><tr><td><code>amountTaken</code></td><td>uint256</td><td>amount of currency taken from the borrow position</td></tr><tr><td><code>duration</code></td><td>uint256</td><td>duration of the new loan from moment of refinance</td></tr></tbody></table>

### liquidateBorrow() <a href="#functionality" id="functionality"></a>

**`function liquidateBorrow(uint256 borrowId)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Liquidates a borrow position.

<table><thead><tr><th width="227.33333333333331">Parameter Name</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code>borrowId</code></td><td>uint256</td><td>id of the targeted borrow</td></tr></tbody></table>

### setBorrowAuctionCall() <a href="#functionality" id="functionality"></a>

**`function setBorrowAuctionCall(uint256 borrowId, uint256 auctionStartPrice, uint256 auctionEndPrice, uint256 auctionTimestamp, address auctionCaller)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Calls a liquidation auction on a defaulted borrow. Accessible by the LendingPool, only.

<table><thead><tr><th width="227.33333333333331">Parameter Name</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code>borrowId</code></td><td>uint256</td><td>id of the targeted borrow</td></tr><tr><td><code>auctionStartPrice</code></td><td>uint256</td><td>start price of the Dutch auction</td></tr><tr><td><code>auctionEndPrice</code></td><td>uint256</td><td>end price of the Dutch auction</td></tr><tr><td><code>auctionTimestamp</code></td><td>uint256</td><td>timestamp of the auction</td></tr><tr><td><code>auctionCaller</code></td><td>address</td><td>address of the auction caller, to receive bonus</td></tr></tbody></table>

### setBorrowStatus() <a href="#functionality" id="functionality"></a>

**`function setBorrowStatus(uint256 borrowId, DataTypes.BorrowStatus status)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Sets the status of a borrow. Accessible by the LendingPool, only.

<table><thead><tr><th width="227.33333333333331">Parameter Name</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code>borrowId</code></td><td>uint256</td><td>id of the targeted borrow</td></tr><tr><td><code>status</code></td><td>DataTypes.BorrowStatus status</td><td>status of the borrow:<br><code>None</code>, // Default zero<br><code>Active</code>, // Open<br><code>Repaid</code>, // Closed, repaid<br><code>Auction</code>, // In Auction<br><code>Liquidated</code>, // Closed, <code>Defaulted</code></td></tr></tbody></table>

### setBlacklisted() <a href="#functionality" id="functionality"></a>

**`function setBorrowStatus(address collateral, uint256 tokenId, bool isBlacklisted)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Blacklists a collateral tokenId.

<table><thead><tr><th width="227.33333333333331">Parameter Name</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code>collateral</code></td><td>address</td><td>address of the NFT to be used as collateral</td></tr><tr><td><code>tokenId</code></td><td>uint256</td><td>tokenId of the NFT to be used as collateral</td></tr><tr><td><code>isBlacklisted</code></td><td>bool</td><td>true if collateral tokenId is blacklisted, default: false</td></tr></tbody></table>

## View Methods

### getBorrowAmount()

**`function getBorrowAmount(uint256 borrowId)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Returns the `amount` borrowed within a loan.

<table><thead><tr><th width="227.33333333333331">Parameter Name</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code>borrowId</code></td><td>uint256</td><td>id of the targeted borrow</td></tr></tbody></table>

### getScaledAmount()

**`function getScaledAmount(uint256 borrowId)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Returns the `scaledAmount`, i.e. the number of debtTokens against a borrow (not accounting for the normalised variable debt).

### getBorrowNumTokens()

**`function getBorrowNumTokens(uint256 borrowId)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Returns the `number of ERC1155 tokens` used as collateral, 0 if ERC721.

### borrowerOf

**`function borrowerOf(uint256 borrowId)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Returns the address of the original loan `borrower`.

{% hint style="info" %}
As opposed to the original borrower, the current borrower is the holder of the obligation receipt.
{% endhint %}

### getBorrowId()

**`function getBorrowId(address collateral, uint256 tokenId)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Returns the `borrowId` of a loan.

### getLastBorrowId()

**`function getLastBorrowId()`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Returns the last `borrowId`.

### getNumNftBorrows()

**`function getNumNftBorrows(address collataral)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Returns the `number of borrows` for a given NFT collateral.

### getNumUserNftBorrows()

**`function getNumUserNftBorrows(address user, address collateral)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Returns the `number of borrows` for a given user, using a given NFT collateral.

### getBorrow()

**`function getBorrow(uint256 borrowId)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Returns `borrowData` for a given id.

#### Returns

<table><thead><tr><th width="227.33333333333331">Parameter Name</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code>borrowData</code></td><td>DataTypes.Borrow memory</td><td>borrow data:<br><code>status</code><br><code>collateral</code><br><code>auction</code><br><code>borrower</code><br><code>erc20Token</code><br><code>borrowAmount</code><br><code>scaledAmount</code><br><code>timestamp</code><br><code>duration</code><br><code>reserveId</code><br><code>tokenizedId</code></td></tr></tbody></table>

### getAuctionPrice()

**`function getAuctionPrice(uint256 borrowId)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Returns the current Dutch auction `price` for the underlying collateral of a defaulted loan in auction.

### isBlacklisted()

**`function isBlacklisted(address collateral, uint256 tokenId)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Returns `true` if the specific NFT is blacklisted.

## ABI

<details>

<summary>Collateral Manager ABI</summary>

```
{
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "initiator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "onBehalfOf",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "borrowId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "collateral",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenValue",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "duration",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "borrowIndex",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenizedId",
          "type": "uint256"
        }
      ],
      "name": "BorrowCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "initiator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "borrowId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "collateral",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "borrowIndex",
          "type": "uint256"
        }
      ],
      "name": "BorrowLiquidated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "initiator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "borrowId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "collateral",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "borrowAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amountAdded",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amountTaken",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "duration",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "BorrowRefinanced",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "initiator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "borrowId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "collateral",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "borrowIndex",
          "type": "uint256"
        }
      ],
      "name": "BorrowRepaid",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "initiator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "borrowId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "collateral",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amountAdded",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amountTaken",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "borrowIndex",
          "type": "uint256"
        }
      ],
      "name": "BorrowUpdated",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "borrowId",
          "type": "uint256"
        }
      ],
      "name": "borrowerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "initiator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "onBehalfOf",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "collateral",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "tokenValue",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "duration",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "borrowIndex",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        }
      ],
      "name": "createBorrow",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "borrowId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "tokenizedId",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "borrowId",
          "type": "uint256"
        }
      ],
      "name": "getAuctionPrice",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "borrowId",
          "type": "uint256"
        }
      ],
      "name": "getBorrow",
      "outputs": [
        {
          "components": [
            {
              "internalType": "enum DataTypes.BorrowStatus",
              "name": "status",
              "type": "uint8"
            },
            {
              "components": [
                {
                  "internalType": "enum DataTypes.CollateralType",
                  "name": "collateralType",
                  "type": "uint8"
                },
                {
                  "internalType": "address",
                  "name": "collateral",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "internalType": "struct DataTypes.Collateral",
              "name": "collateral",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "caller",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "startPrice",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "endPrice",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "timestamp",
                  "type": "uint256"
                }
              ],
              "internalType": "struct DataTypes.Auction",
              "name": "auction",
              "type": "tuple"
            },
            {
              "internalType": "address",
              "name": "borrower",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "erc20Token",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "borrowAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "scaledAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "timestamp",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "duration",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "tokenizedId",
              "type": "uint256"
            }
          ],
          "internalType": "struct DataTypes.Borrow",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "borrowId",
          "type": "uint256"
        }
      ],
      "name": "getBorrowAmount",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "collateral",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getBorrowId",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "borrowId",
          "type": "uint256"
        }
      ],
      "name": "getBorrowNumTokens",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "collateral",
          "type": "address"
        }
      ],
      "name": "getNumNftBorrows",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "collateral",
          "type": "address"
        }
      ],
      "name": "getNumUserNftBorrows",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "borrowId",
          "type": "uint256"
        }
      ],
      "name": "getScaledAmount",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "collateral",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "isBlacklisted",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "borrowId",
          "type": "uint256"
        }
      ],
      "name": "liquidateBorrow",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "initiator",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "borrowId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "borrowAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountAdded",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountTaken",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "duration",
          "type": "uint256"
        }
      ],
      "name": "refinanceBorrow",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "initiator",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "borrowId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "borrowIndex",
          "type": "uint256"
        }
      ],
      "name": "repayBorrow",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "collateral",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "isBlacklisted_",
          "type": "bool"
        }
      ],
      "name": "setBlacklisted",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "borrowId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "auctionStartPrice",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "auctionEndPrice",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "auctionTimestamp",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "auctionCaller",
          "type": "address"
        }
      ],
      "name": "setBorrowAuctionCall",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "borrowId",
          "type": "uint256"
        },
        {
          "internalType": "enum DataTypes.BorrowStatus",
          "name": "status",
          "type": "uint8"
        }
      ],
      "name": "setBorrowStatus",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "initiator",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "borrowId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountAdded",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountTaken",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "borrowIndex",
          "type": "uint256"
        }
      ],
      "name": "updateBorrow",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x",
    "sourceMap": "",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x",
    "sourceMap": "",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "borrowerOf(uint256)": "2a24d53d",
    "createBorrow(address,address,address,uint256,uint256,address,uint256,uint256,uint256,uint256)": "7f1acb01",
    "getAuctionPrice(uint256)": "917d009e",
    "getBorrow(uint256)": "b176e311",
    "getBorrowAmount(uint256)": "01667623",
    "getBorrowId(address,uint256)": "4dad3a3e",
    "getBorrowNumTokens(uint256)": "d5300890",
    "getNumNftBorrows(address)": "b02d58b9",
    "getNumUserNftBorrows(address,address)": "073fa0b7",
    "getScaledAmount(uint256)": "3c613456",
    "isBlacklisted(address,uint256)": "e7571483",
    "liquidateBorrow(uint256)": "34613dab",
    "refinanceBorrow(address,uint256,uint256,uint256,uint256,uint256)": "7130d10e",
    "repayBorrow(address,uint256,uint256,uint256)": "2d18159a",
    "setBlacklisted(address,uint256,bool)": "09f4cf3f",
    "setBorrowAuctionCall(uint256,uint256,uint256,uint256,address)": "60e2c78f",
    "setBorrowStatus(uint256,uint8)": "e8a7cfff",
    "updateBorrow(address,uint256,uint256,uint256,uint256)": "da1e2134"
  },
  "rawMetadata": "{\"compiler\":{\"version\":\"0.8.16+commit.07a7930e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"borrowId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"borrowIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenizedId\",\"type\":\"uint256\"}],\"name\":\"BorrowCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"borrowId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"borrowIndex\",\"type\":\"uint256\"}],\"name\":\"BorrowLiquidated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"borrowId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"borrowAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountAdded\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountTaken\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"BorrowRefinanced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"borrowId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"borrowIndex\",\"type\":\"uint256\"}],\"name\":\"BorrowRepaid\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"borrowId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountAdded\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountTaken\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"borrowIndex\",\"type\":\"uint256\"}],\"name\":\"BorrowUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"borrowId\",\"type\":\"uint256\"}],\"name\":\"borrowerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenValue\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"}],\"name\":\"createBorrow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"borrowId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenizedId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"borrowId\",\"type\":\"uint256\"}],\"name\":\"getAuctionPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"borrowId\",\"type\":\"uint256\"}],\"name\":\"getBorrow\",\"outputs\":[{\"components\":[{\"internalType\":\"enum DataTypes.BorrowStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"components\":[{\"internalType\":\"enum DataTypes.CollateralType\",\"name\":\"collateralType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct DataTypes.Collateral\",\"name\":\"collateral\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"startPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"internalType\":\"struct DataTypes.Auction\",\"name\":\"auction\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"erc20Token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"borrowAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"scaledAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenizedId\",\"type\":\"uint256\"}],\"internalType\":\"struct DataTypes.Borrow\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"borrowId\",\"type\":\"uint256\"}],\"name\":\"getBorrowAmount\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getBorrowId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"borrowId\",\"type\":\"uint256\"}],\"name\":\"getBorrowNumTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"}],\"name\":\"getNumNftBorrows\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"}],\"name\":\"getNumUserNftBorrows\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"borrowId\",\"type\":\"uint256\"}],\"name\":\"getScaledAmount\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"isBlacklisted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"borrowId\",\"type\":\"uint256\"}],\"name\":\"liquidateBorrow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"borrowId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountAdded\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountTaken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"name\":\"refinanceBorrow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"borrowId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowIndex\",\"type\":\"uint256\"}],\"name\":\"repayBorrow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isBlacklisted_\",\"type\":\"bool\"}],\"name\":\"setBlacklisted\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"borrowId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"auctionStartPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"auctionEndPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"auctionTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"auctionCaller\",\"type\":\"address\"}],\"name\":\"setBorrowAuctionCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"borrowId\",\"type\":\"uint256\"},{\"internalType\":\"enum DataTypes.BorrowStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"setBorrowStatus\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"borrowId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountAdded\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountTaken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowIndex\",\"type\":\"uint256\"}],\"name\":\"updateBorrow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"BorrowCreated(address,address,uint256,address,uint256,uint256,address,uint256,uint256,uint256,uint256)\":{\"details\":\"Emitted when a borrow is created\",\"params\":{\"initiator\":\"The address initiating the action\"}},\"BorrowLiquidated(address,uint256,address,uint256,address,uint256,uint256)\":{\"details\":\"Emitted when a borrow is liquidate by the liquidator\",\"params\":{\"initiator\":\"The address initiating the action\"}},\"BorrowRefinanced(address,uint256,address,uint256,address,uint256,uint256,uint256,uint256,uint256)\":{\"details\":\"Emitted when a borrow is refinanced by the borrower\",\"params\":{\"initiator\":\"The address initiating the action\"}},\"BorrowRepaid(address,uint256,address,uint256,address,uint256,uint256)\":{\"details\":\"Emitted when a borrow is repaid by the borrower\",\"params\":{\"initiator\":\"The address initiating the action\"}},\"BorrowUpdated(address,uint256,address,uint256,address,uint256,uint256,uint256)\":{\"details\":\"Emitted when a borrow is updated\",\"params\":{\"initiator\":\"The address initiating the action\"}}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/interfaces/ICollateralManager.sol\":\"ICollateralManager\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@chainlink/=lib/chainlink/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":chainlink/=lib/chainlink/integration-tests/contracts/ethereum/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"src/interfaces/ICollateralManager.sol\":{\"keccak256\":\"0xdcb90cae810d15c23e0606ef3d9b30feec7d35e956082b88c1f35c5d6caf6438\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://c45a3cf14add38004018f32987cab971436cfd2e679eea71f2383f845bd68647\",\"dweb:/ipfs/QmPd9df3JmDFMHnhreYWw8tjmRGEQAtERnqj2YREXB5aP5\"]},\"src/protocol/libraries/types/DataTypes.sol\":{\"keccak256\":\"0x070f7865fe84ce4c9ebd86bbe24771607fbdb4e8777510b46cb5064e4d9b90a3\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://504fd0c937cc69cc0737c4ef5dcec477017ccbff609b45b210274fd7bf0792cf\",\"dweb:/ipfs/QmeW1TkAHib7XRBVmgMRTdmsa4Rg9HVToTMnifEE1C7mTi\"]}},\"version\":1}",
  "metadata": {
    "compiler": {
      "version": "0.8.16+commit.07a7930e"
    },
    "language": "Solidity",
    "output": {
      "abi": [
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "initiator",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "onBehalfOf",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "borrowId",
              "type": "uint256",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "collateral",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "tokenValue",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "address",
              "name": "asset",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "duration",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "borrowIndex",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "tokenizedId",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "BorrowCreated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "initiator",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "borrowId",
              "type": "uint256",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "collateral",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "address",
              "name": "asset",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "borrowIndex",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "BorrowLiquidated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "initiator",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "borrowId",
              "type": "uint256",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "collateral",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "address",
              "name": "asset",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "borrowAmount",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "amountAdded",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "amountTaken",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "duration",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "timestamp",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "BorrowRefinanced",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "initiator",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "borrowId",
              "type": "uint256",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "collateral",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "address",
              "name": "asset",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "borrowIndex",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "BorrowRepaid",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "initiator",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "borrowId",
              "type": "uint256",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "collateral",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "address",
              "name": "asset",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "amountAdded",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "amountTaken",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "borrowIndex",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "BorrowUpdated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "borrowId",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "borrowerOf",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "initiator",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "onBehalfOf",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "collateral",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "tokenValue",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "asset",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "duration",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "borrowIndex",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "createBorrow",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "borrowId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "tokenizedId",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "borrowId",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getAuctionPrice",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "borrowId",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getBorrow",
          "outputs": [
            {
              "internalType": "struct DataTypes.Borrow",
              "name": "",
              "type": "tuple",
              "components": [
                {
                  "internalType": "enum DataTypes.BorrowStatus",
                  "name": "status",
                  "type": "uint8"
                },
                {
                  "internalType": "struct DataTypes.Collateral",
                  "name": "collateral",
                  "type": "tuple",
                  "components": [
                    {
                      "internalType": "enum DataTypes.CollateralType",
                      "name": "collateralType",
                      "type": "uint8"
                    },
                    {
                      "internalType": "address",
                      "name": "collateral",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "tokenId",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "value",
                      "type": "uint256"
                    }
                  ]
                },
                {
                  "internalType": "struct DataTypes.Auction",
                  "name": "auction",
                  "type": "tuple",
                  "components": [
                    {
                      "internalType": "address",
                      "name": "caller",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "startPrice",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "endPrice",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "timestamp",
                      "type": "uint256"
                    }
                  ]
                },
                {
                  "internalType": "address",
                  "name": "borrower",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "erc20Token",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "borrowAmount",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "scaledAmount",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "timestamp",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "duration",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "reserveId",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenizedId",
                  "type": "uint256"
                }
              ]
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "borrowId",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getBorrowAmount",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "collateral",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getBorrowId",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "borrowId",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getBorrowNumTokens",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "collateral",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getNumNftBorrows",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "user",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "collateral",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getNumUserNftBorrows",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "borrowId",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getScaledAmount",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "collateral",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "isBlacklisted",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "borrowId",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "liquidateBorrow"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "initiator",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "borrowId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "borrowAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountAdded",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountTaken",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "duration",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "refinanceBorrow"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "initiator",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "borrowId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "borrowIndex",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "repayBorrow"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "collateral",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "isBlacklisted_",
              "type": "bool"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setBlacklisted"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "borrowId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "auctionStartPrice",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "auctionEndPrice",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "auctionTimestamp",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "auctionCaller",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setBorrowAuctionCall"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "borrowId",
              "type": "uint256"
            },
            {
              "internalType": "enum DataTypes.BorrowStatus",
              "name": "status",
              "type": "uint8"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setBorrowStatus",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "initiator",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "borrowId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountAdded",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountTaken",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "borrowIndex",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "updateBorrow"
        }
      ],
      "devdoc": {
        "kind": "dev",
        "methods": {},
        "version": 1
      },
      "userdoc": {
        "kind": "user",
        "methods": {},
        "version": 1
      }
    },
    "settings": {
      "remappings": [
        ":@chainlink/=lib/chainlink/",
        ":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
        ":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
        ":chainlink/=lib/chainlink/integration-tests/contracts/ethereum/src/",
        ":ds-test/=lib/forge-std/lib/ds-test/src/",
        ":forge-std/=lib/forge-std/src/"
      ],
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "metadata": {
        "bytecodeHash": "ipfs"
      },
      "compilationTarget": {
        "src/interfaces/ICollateralManager.sol": "ICollateralManager"
      },
      "libraries": {}
    },
    "sources": {
      "src/interfaces/ICollateralManager.sol": {
        "keccak256": "0xdcb90cae810d15c23e0606ef3d9b30feec7d35e956082b88c1f35c5d6caf6438",
        "urls": [
          "bzz-raw://c45a3cf14add38004018f32987cab971436cfd2e679eea71f2383f845bd68647",
          "dweb:/ipfs/QmPd9df3JmDFMHnhreYWw8tjmRGEQAtERnqj2YREXB5aP5"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/types/DataTypes.sol": {
        "keccak256": "0x070f7865fe84ce4c9ebd86bbe24771607fbdb4e8777510b46cb5064e4d9b90a3",
        "urls": [
          "bzz-raw://504fd0c937cc69cc0737c4ef5dcec477017ccbff609b45b210274fd7bf0792cf",
          "dweb:/ipfs/QmeW1TkAHib7XRBVmgMRTdmsa4Rg9HVToTMnifEE1C7mTi"
        ],
        "license": "AGPL-3.0"
      }
    },
    "version": 1
  },
  "ast": {
    "absolutePath": "src/interfaces/ICollateralManager.sol",
    "id": 46786,
    "exportedSymbols": {
      "DataTypes": [
        65297
      ],
      "ICollateralManager": [
        46785
      ]
    },
    "nodeType": "SourceUnit",
    "src": "38:5124:101",
    "nodes": [
      {
        "id": 46486,
        "nodeType": "PragmaDirective",
        "src": "38:23:101",
        "nodes": [],
        "literals": [
          "solidity",
          "0.8",
          ".16"
        ]
      },
      {
        "id": 46488,
        "nodeType": "ImportDirective",
        "src": "65:70:101",
        "nodes": [],
        "absolutePath": "src/protocol/libraries/types/DataTypes.sol",
        "file": "../protocol/libraries/types/DataTypes.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 46786,
        "sourceUnit": 65298,
        "symbolAliases": [
          {
            "foreign": {
              "id": 46487,
              "name": "DataTypes",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 65297,
              "src": "74:9:101",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 46785,
        "nodeType": "ContractDefinition",
        "src": "139:5023:101",
        "nodes": [
          {
            "id": 46495,
            "nodeType": "StructDefinition",
            "src": "175:132:101",
            "nodes": [],
            "canonicalName": "ICollateralManager.UpdateVars",
            "members": [
              {
                "constant": false,
                "id": 46490,
                "mutability": "mutable",
                "name": "borrowAsset",
                "nameLocation": "212:11:101",
                "nodeType": "VariableDeclaration",
                "scope": 46495,
                "src": "204:19:101",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 46489,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "204:7:101",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 46492,
                "mutability": "mutable",
                "name": "accruedBorrowAmount",
                "nameLocation": "242:19:101",
                "nodeType": "VariableDeclaration",
                "scope": 46495,
                "src": "234:27:101",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 46491,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "234:7:101",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 46494,
                "mutability": "mutable",
                "name": "updatedBorrowAmount",
                "nameLocation": "280:19:101",
                "nodeType": "VariableDeclaration",
                "scope": 46495,
                "src": "272:27:101",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 46493,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "272:7:101",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "UpdateVars",
            "nameLocation": "182:10:101",
            "scope": 46785,
            "visibility": "public"
          },
          {
            "id": 46520,
            "nodeType": "EventDefinition",
            "src": "438:355:101",
            "nodes": [],
            "anonymous": false,
            "documentation": {
              "id": 46496,
              "nodeType": "StructuredDocumentation",
              "src": "315:117:101",
              "text": " @dev Emitted when a borrow is created\n @param initiator The address initiating the action"
            },
            "eventSelector": "de617ecaa64fba83afb549b6a243ada1259af7abf7071cfbe5a5d3bf6c0ed181",
            "name": "BorrowCreated",
            "nameLocation": "444:13:101",
            "parameters": {
              "id": 46519,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46498,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "initiator",
                  "nameLocation": "484:9:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46520,
                  "src": "468:25:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 46497,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "468:7:101",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46500,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "onBehalfOf",
                  "nameLocation": "520:10:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46520,
                  "src": "504:26:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 46499,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "504:7:101",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46502,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "borrowId",
                  "nameLocation": "557:8:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46520,
                  "src": "541:24:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46501,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "541:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46504,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "collateral",
                  "nameLocation": "584:10:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46520,
                  "src": "576:18:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 46503,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "576:7:101",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46506,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "613:7:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46520,
                  "src": "605:15:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46505,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "605:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46508,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "tokenValue",
                  "nameLocation": "639:10:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46520,
                  "src": "631:18:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46507,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "631:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46510,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "asset",
                  "nameLocation": "668:5:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46520,
                  "src": "660:13:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 46509,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "660:7:101",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46512,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "692:6:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46520,
                  "src": "684:14:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46511,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "684:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46514,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "duration",
                  "nameLocation": "717:8:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46520,
                  "src": "709:16:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46513,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "709:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46516,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "borrowIndex",
                  "nameLocation": "744:11:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46520,
                  "src": "736:19:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46515,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "736:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46518,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "tokenizedId",
                  "nameLocation": "774:11:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46520,
                  "src": "766:19:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46517,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "766:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "457:335:101"
            }
          },
          {
            "id": 46539,
            "nodeType": "EventDefinition",
            "src": "924:267:101",
            "nodes": [],
            "anonymous": false,
            "documentation": {
              "id": 46521,
              "nodeType": "StructuredDocumentation",
              "src": "801:117:101",
              "text": " @dev Emitted when a borrow is updated\n @param initiator The address initiating the action"
            },
            "eventSelector": "f5b9074673be348494563f7c2048b0a7672c6d8f04147a00ce73f968ce920bfd",
            "name": "BorrowUpdated",
            "nameLocation": "930:13:101",
            "parameters": {
              "id": 46538,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46523,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "initiator",
                  "nameLocation": "970:9:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46539,
                  "src": "954:25:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 46522,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "954:7:101",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46525,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "borrowId",
                  "nameLocation": "1006:8:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46539,
                  "src": "990:24:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46524,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "990:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46527,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "collateral",
                  "nameLocation": "1033:10:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46539,
                  "src": "1025:18:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 46526,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1025:7:101",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46529,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "1062:7:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46539,
                  "src": "1054:15:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46528,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1054:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46531,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "asset",
                  "nameLocation": "1088:5:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46539,
                  "src": "1080:13:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 46530,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1080:7:101",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46533,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amountAdded",
                  "nameLocation": "1112:11:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46539,
                  "src": "1104:19:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46532,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1104:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46535,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amountTaken",
                  "nameLocation": "1142:11:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46539,
                  "src": "1134:19:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46534,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1134:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46537,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "borrowIndex",
                  "nameLocation": "1172:11:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46539,
                  "src": "1164:19:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46536,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1164:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "943:247:101"
            }
          },
          {
            "id": 46556,
            "nodeType": "EventDefinition",
            "src": "1337:231:101",
            "nodes": [],
            "anonymous": false,
            "documentation": {
              "id": 46540,
              "nodeType": "StructuredDocumentation",
              "src": "1199:132:101",
              "text": " @dev Emitted when a borrow is repaid by the borrower\n @param initiator The address initiating the action"
            },
            "eventSelector": "e6f0f841f009904ff64d6a1cb3441a66c0fa90373839cf1c07e3dfefced0c3a5",
            "name": "BorrowRepaid",
            "nameLocation": "1343:12:101",
            "parameters": {
              "id": 46555,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46542,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "initiator",
                  "nameLocation": "1382:9:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46556,
                  "src": "1366:25:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 46541,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1366:7:101",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46544,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "borrowId",
                  "nameLocation": "1418:8:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46556,
                  "src": "1402:24:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46543,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1402:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46546,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "collateral",
                  "nameLocation": "1445:10:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46556,
                  "src": "1437:18:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 46545,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1437:7:101",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46548,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "1474:7:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46556,
                  "src": "1466:15:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46547,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1466:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46550,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "asset",
                  "nameLocation": "1500:5:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46556,
                  "src": "1492:13:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 46549,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1492:7:101",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46552,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "1524:6:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46556,
                  "src": "1516:14:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46551,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1516:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46554,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "borrowIndex",
                  "nameLocation": "1549:11:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46556,
                  "src": "1541:19:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46553,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1541:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1355:212:101"
            }
          },
          {
            "id": 46579,
            "nodeType": "EventDefinition",
            "src": "1718:326:101",
            "nodes": [],
            "anonymous": false,
            "documentation": {
              "id": 46557,
              "nodeType": "StructuredDocumentation",
              "src": "1576:136:101",
              "text": " @dev Emitted when a borrow is refinanced by the borrower\n @param initiator The address initiating the action"
            },
            "eventSelector": "911e005cf0c211d5ec24c434f5e7e3084e4e1221f7e351a9b73f473fa817fd6d",
            "name": "BorrowRefinanced",
            "nameLocation": "1724:16:101",
            "parameters": {
              "id": 46578,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46559,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "initiator",
                  "nameLocation": "1767:9:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46579,
                  "src": "1751:25:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 46558,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1751:7:101",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46561,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "borrowId",
                  "nameLocation": "1803:8:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46579,
                  "src": "1787:24:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46560,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1787:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46563,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "collateral",
                  "nameLocation": "1830:10:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46579,
                  "src": "1822:18:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 46562,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1822:7:101",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46565,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "1859:7:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46579,
                  "src": "1851:15:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46564,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1851:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46567,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "asset",
                  "nameLocation": "1885:5:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46579,
                  "src": "1877:13:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 46566,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1877:7:101",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46569,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "borrowAmount",
                  "nameLocation": "1909:12:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46579,
                  "src": "1901:20:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46568,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1901:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46571,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amountAdded",
                  "nameLocation": "1940:11:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46579,
                  "src": "1932:19:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46570,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1932:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46573,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amountTaken",
                  "nameLocation": "1970:11:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46579,
                  "src": "1962:19:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46572,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1962:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46575,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "duration",
                  "nameLocation": "2000:8:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46579,
                  "src": "1992:16:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46574,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1992:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46577,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "timestamp",
                  "nameLocation": "2027:9:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46579,
                  "src": "2019:17:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46576,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2019:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1740:303:101"
            }
          },
          {
            "id": 46596,
            "nodeType": "EventDefinition",
            "src": "2195:235:101",
            "nodes": [],
            "anonymous": false,
            "documentation": {
              "id": 46580,
              "nodeType": "StructuredDocumentation",
              "src": "2052:137:101",
              "text": " @dev Emitted when a borrow is liquidate by the liquidator\n @param initiator The address initiating the action"
            },
            "eventSelector": "c3f4fb0e0081143b0620d18ee26038c1d208483481251e2989bed65686c77ded",
            "name": "BorrowLiquidated",
            "nameLocation": "2201:16:101",
            "parameters": {
              "id": 46595,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46582,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "initiator",
                  "nameLocation": "2244:9:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46596,
                  "src": "2228:25:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 46581,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2228:7:101",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46584,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "borrowId",
                  "nameLocation": "2280:8:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46596,
                  "src": "2264:24:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46583,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2264:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46586,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "collateral",
                  "nameLocation": "2307:10:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46596,
                  "src": "2299:18:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 46585,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2299:7:101",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46588,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "2336:7:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46596,
                  "src": "2328:15:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46587,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2328:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46590,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "asset",
                  "nameLocation": "2362:5:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46596,
                  "src": "2354:13:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 46589,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2354:7:101",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46592,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "2386:6:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46596,
                  "src": "2378:14:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46591,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2378:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46594,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "borrowIndex",
                  "nameLocation": "2411:11:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46596,
                  "src": "2403:19:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46593,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2403:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2217:212:101"
            }
          },
          {
            "id": 46603,
            "nodeType": "FunctionDefinition",
            "src": "2438:112:101",
            "nodes": [],
            "functionSelector": "2a24d53d",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "borrowerOf",
            "nameLocation": "2447:10:101",
            "parameters": {
              "id": 46599,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46598,
                  "mutability": "mutable",
                  "name": "borrowId",
                  "nameLocation": "2476:8:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46603,
                  "src": "2468:16:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46597,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2468:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2457:34:101"
            },
            "returnParameters": {
              "id": 46602,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46601,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 46603,
                  "src": "2541:7:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 46600,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2541:7:101",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2540:9:101"
            },
            "scope": 46785,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 46610,
            "nodeType": "FunctionDefinition",
            "src": "2558:78:101",
            "nodes": [],
            "functionSelector": "b02d58b9",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getNumNftBorrows",
            "nameLocation": "2567:16:101",
            "parameters": {
              "id": 46606,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46605,
                  "mutability": "mutable",
                  "name": "collateral",
                  "nameLocation": "2592:10:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46610,
                  "src": "2584:18:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 46604,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2584:7:101",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2583:20:101"
            },
            "returnParameters": {
              "id": 46609,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46608,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 46610,
                  "src": "2627:7:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46607,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2627:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2626:9:101"
            },
            "scope": 46785,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 46619,
            "nodeType": "FunctionDefinition",
            "src": "2644:96:101",
            "nodes": [],
            "functionSelector": "073fa0b7",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getNumUserNftBorrows",
            "nameLocation": "2653:20:101",
            "parameters": {
              "id": 46615,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46612,
                  "mutability": "mutable",
                  "name": "user",
                  "nameLocation": "2682:4:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46619,
                  "src": "2674:12:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 46611,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2674:7:101",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46614,
                  "mutability": "mutable",
                  "name": "collateral",
                  "nameLocation": "2696:10:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46619,
                  "src": "2688:18:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 46613,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2688:7:101",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2673:34:101"
            },
            "returnParameters": {
              "id": 46618,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46617,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 46619,
                  "src": "2731:7:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46616,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2731:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2730:9:101"
            },
            "scope": 46785,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 46627,
            "nodeType": "FunctionDefinition",
            "src": "2748:85:101",
            "nodes": [],
            "functionSelector": "b176e311",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getBorrow",
            "nameLocation": "2757:9:101",
            "parameters": {
              "id": 46622,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46621,
                  "mutability": "mutable",
                  "name": "borrowId",
                  "nameLocation": "2775:8:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46627,
                  "src": "2767:16:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46620,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2767:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2766:18:101"
            },
            "returnParameters": {
              "id": 46626,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46625,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 46627,
                  "src": "2808:23:101",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Borrow_$64853_memory_ptr",
                    "typeString": "struct DataTypes.Borrow"
                  },
                  "typeName": {
                    "id": 46624,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 46623,
                      "name": "DataTypes.Borrow",
                      "nameLocations": [
                        "2808:9:101",
                        "2818:6:101"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 64853,
                      "src": "2808:16:101"
                    },
                    "referencedDeclaration": 64853,
                    "src": "2808:16:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Borrow_$64853_storage_ptr",
                      "typeString": "struct DataTypes.Borrow"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2807:25:101"
            },
            "scope": 46785,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 46636,
            "nodeType": "FunctionDefinition",
            "src": "2841:90:101",
            "nodes": [],
            "functionSelector": "4dad3a3e",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getBorrowId",
            "nameLocation": "2850:11:101",
            "parameters": {
              "id": 46632,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46629,
                  "mutability": "mutable",
                  "name": "collateral",
                  "nameLocation": "2870:10:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46636,
                  "src": "2862:18:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 46628,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2862:7:101",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46631,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "2890:7:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46636,
                  "src": "2882:15:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46630,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2882:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2861:37:101"
            },
            "returnParameters": {
              "id": 46635,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46634,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 46636,
                  "src": "2922:7:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46633,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2922:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2921:9:101"
            },
            "scope": 46785,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 46646,
            "nodeType": "FunctionDefinition",
            "src": "2940:142:101",
            "nodes": [],
            "functionSelector": "e8a7cfff",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "setBorrowStatus",
            "nameLocation": "2949:15:101",
            "parameters": {
              "id": 46642,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46638,
                  "mutability": "mutable",
                  "name": "borrowId",
                  "nameLocation": "2983:8:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46646,
                  "src": "2975:16:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46637,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2975:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46641,
                  "mutability": "mutable",
                  "name": "status",
                  "nameLocation": "3025:6:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46646,
                  "src": "3002:29:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_BorrowStatus_$64716",
                    "typeString": "enum DataTypes.BorrowStatus"
                  },
                  "typeName": {
                    "id": 46640,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 46639,
                      "name": "DataTypes.BorrowStatus",
                      "nameLocations": [
                        "3002:9:101",
                        "3012:12:101"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 64716,
                      "src": "3002:22:101"
                    },
                    "referencedDeclaration": 64716,
                    "src": "3002:22:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_BorrowStatus_$64716",
                      "typeString": "enum DataTypes.BorrowStatus"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2964:74:101"
            },
            "returnParameters": {
              "id": 46645,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46644,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 46646,
                  "src": "3076:4:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 46643,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3076:4:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3075:6:101"
            },
            "scope": 46785,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 46673,
            "nodeType": "FunctionDefinition",
            "src": "3090:421:101",
            "nodes": [],
            "functionSelector": "7f1acb01",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "createBorrow",
            "nameLocation": "3099:12:101",
            "parameters": {
              "id": 46667,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46648,
                  "mutability": "mutable",
                  "name": "initiator",
                  "nameLocation": "3130:9:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46673,
                  "src": "3122:17:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 46647,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3122:7:101",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46650,
                  "mutability": "mutable",
                  "name": "onBehalfOf",
                  "nameLocation": "3158:10:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46673,
                  "src": "3150:18:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 46649,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3150:7:101",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46652,
                  "mutability": "mutable",
                  "name": "collateral",
                  "nameLocation": "3187:10:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46673,
                  "src": "3179:18:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 46651,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3179:7:101",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46654,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "3216:7:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46673,
                  "src": "3208:15:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46653,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3208:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46656,
                  "mutability": "mutable",
                  "name": "tokenValue",
                  "nameLocation": "3243:10:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46673,
                  "src": "3235:18:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46655,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3235:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46658,
                  "mutability": "mutable",
                  "name": "asset",
                  "nameLocation": "3273:5:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46673,
                  "src": "3265:13:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 46657,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3265:7:101",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46660,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "3298:6:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46673,
                  "src": "3290:14:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46659,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3290:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46662,
                  "mutability": "mutable",
                  "name": "duration",
                  "nameLocation": "3323:8:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46673,
                  "src": "3315:16:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46661,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3315:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46664,
                  "mutability": "mutable",
                  "name": "borrowIndex",
                  "nameLocation": "3350:11:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46673,
                  "src": "3342:19:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46663,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3342:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46666,
                  "mutability": "mutable",
                  "name": "reserveId",
                  "nameLocation": "3380:9:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46673,
                  "src": "3372:17:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46665,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3372:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3111:285:101"
            },
            "returnParameters": {
              "id": 46672,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46669,
                  "mutability": "mutable",
                  "name": "borrowId",
                  "nameLocation": "3457:8:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46673,
                  "src": "3449:16:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46668,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3449:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46671,
                  "mutability": "mutable",
                  "name": "tokenizedId",
                  "nameLocation": "3488:11:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46673,
                  "src": "3480:19:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46670,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3480:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3434:76:101"
            },
            "scope": 46785,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 46686,
            "nodeType": "FunctionDefinition",
            "src": "3519:192:101",
            "nodes": [],
            "functionSelector": "da1e2134",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "updateBorrow",
            "nameLocation": "3528:12:101",
            "parameters": {
              "id": 46684,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46675,
                  "mutability": "mutable",
                  "name": "initiator",
                  "nameLocation": "3559:9:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46686,
                  "src": "3551:17:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 46674,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3551:7:101",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46677,
                  "mutability": "mutable",
                  "name": "borrowId",
                  "nameLocation": "3587:8:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46686,
                  "src": "3579:16:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46676,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3579:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46679,
                  "mutability": "mutable",
                  "name": "amountAdded",
                  "nameLocation": "3614:11:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46686,
                  "src": "3606:19:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46678,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3606:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46681,
                  "mutability": "mutable",
                  "name": "amountTaken",
                  "nameLocation": "3644:11:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46686,
                  "src": "3636:19:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46680,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3636:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46683,
                  "mutability": "mutable",
                  "name": "borrowIndex",
                  "nameLocation": "3674:11:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46686,
                  "src": "3666:19:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46682,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3666:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3540:152:101"
            },
            "returnParameters": {
              "id": 46685,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3710:0:101"
            },
            "scope": 46785,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 46697,
            "nodeType": "FunctionDefinition",
            "src": "3719:156:101",
            "nodes": [],
            "functionSelector": "2d18159a",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "repayBorrow",
            "nameLocation": "3728:11:101",
            "parameters": {
              "id": 46695,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46688,
                  "mutability": "mutable",
                  "name": "initiator",
                  "nameLocation": "3758:9:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46697,
                  "src": "3750:17:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 46687,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3750:7:101",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46690,
                  "mutability": "mutable",
                  "name": "borrowId",
                  "nameLocation": "3786:8:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46697,
                  "src": "3778:16:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46689,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3778:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46692,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "3813:6:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46697,
                  "src": "3805:14:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46691,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3805:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46694,
                  "mutability": "mutable",
                  "name": "borrowIndex",
                  "nameLocation": "3838:11:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46697,
                  "src": "3830:19:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46693,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3830:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3739:117:101"
            },
            "returnParameters": {
              "id": 46696,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3874:0:101"
            },
            "scope": 46785,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 46712,
            "nodeType": "FunctionDefinition",
            "src": "3883:223:101",
            "nodes": [],
            "functionSelector": "7130d10e",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "refinanceBorrow",
            "nameLocation": "3892:15:101",
            "parameters": {
              "id": 46710,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46699,
                  "mutability": "mutable",
                  "name": "initiator",
                  "nameLocation": "3926:9:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46712,
                  "src": "3918:17:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 46698,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3918:7:101",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46701,
                  "mutability": "mutable",
                  "name": "borrowId",
                  "nameLocation": "3954:8:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46712,
                  "src": "3946:16:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46700,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3946:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46703,
                  "mutability": "mutable",
                  "name": "borrowAmount",
                  "nameLocation": "3981:12:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46712,
                  "src": "3973:20:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46702,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3973:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46705,
                  "mutability": "mutable",
                  "name": "amountAdded",
                  "nameLocation": "4012:11:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46712,
                  "src": "4004:19:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46704,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4004:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46707,
                  "mutability": "mutable",
                  "name": "amountTaken",
                  "nameLocation": "4042:11:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46712,
                  "src": "4034:19:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46706,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4034:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46709,
                  "mutability": "mutable",
                  "name": "duration",
                  "nameLocation": "4072:8:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46712,
                  "src": "4064:16:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46708,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4064:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3907:180:101"
            },
            "returnParameters": {
              "id": 46711,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4105:0:101"
            },
            "scope": 46785,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 46725,
            "nodeType": "FunctionDefinition",
            "src": "4114:145:101",
            "nodes": [],
            "functionSelector": "01667623",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getBorrowAmount",
            "nameLocation": "4123:15:101",
            "parameters": {
              "id": 46715,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46714,
                  "mutability": "mutable",
                  "name": "borrowId",
                  "nameLocation": "4157:8:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46725,
                  "src": "4149:16:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46713,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4149:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4138:34:101"
            },
            "returnParameters": {
              "id": 46724,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46717,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 46725,
                  "src": "4223:7:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 46716,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4223:7:101",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46719,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 46725,
                  "src": "4232:7:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46718,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4232:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46721,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 46725,
                  "src": "4241:7:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 46720,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4241:7:101",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46723,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 46725,
                  "src": "4250:7:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46722,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4250:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4222:36:101"
            },
            "scope": 46785,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 46732,
            "nodeType": "FunctionDefinition",
            "src": "4267:122:101",
            "nodes": [],
            "functionSelector": "d5300890",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getBorrowNumTokens",
            "nameLocation": "4276:18:101",
            "parameters": {
              "id": 46728,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46727,
                  "mutability": "mutable",
                  "name": "borrowId",
                  "nameLocation": "4313:8:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46732,
                  "src": "4305:16:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46726,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4305:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4294:34:101"
            },
            "returnParameters": {
              "id": 46731,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46730,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 46732,
                  "src": "4380:7:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46729,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4380:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4379:9:101"
            },
            "scope": 46785,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 46739,
            "nodeType": "FunctionDefinition",
            "src": "4397:118:101",
            "nodes": [],
            "functionSelector": "917d009e",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getAuctionPrice",
            "nameLocation": "4406:15:101",
            "parameters": {
              "id": 46735,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46734,
                  "mutability": "mutable",
                  "name": "borrowId",
                  "nameLocation": "4440:8:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46739,
                  "src": "4432:16:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46733,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4432:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4421:34:101"
            },
            "returnParameters": {
              "id": 46738,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46737,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 46739,
                  "src": "4506:7:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46736,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4506:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4505:9:101"
            },
            "scope": 46785,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 46748,
            "nodeType": "FunctionDefinition",
            "src": "4523:126:101",
            "nodes": [],
            "functionSelector": "3c613456",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getScaledAmount",
            "nameLocation": "4532:15:101",
            "parameters": {
              "id": 46742,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46741,
                  "mutability": "mutable",
                  "name": "borrowId",
                  "nameLocation": "4566:8:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46748,
                  "src": "4558:16:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46740,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4558:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4547:34:101"
            },
            "returnParameters": {
              "id": 46747,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46744,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 46748,
                  "src": "4631:7:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 46743,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4631:7:101",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46746,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 46748,
                  "src": "4640:7:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46745,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4640:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4630:18:101"
            },
            "scope": 46785,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 46761,
            "nodeType": "FunctionDefinition",
            "src": "4657:221:101",
            "nodes": [],
            "functionSelector": "60e2c78f",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "setBorrowAuctionCall",
            "nameLocation": "4666:20:101",
            "parameters": {
              "id": 46759,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46750,
                  "mutability": "mutable",
                  "name": "borrowId",
                  "nameLocation": "4705:8:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46761,
                  "src": "4697:16:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46749,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4697:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46752,
                  "mutability": "mutable",
                  "name": "auctionStartPrice",
                  "nameLocation": "4733:17:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46761,
                  "src": "4725:25:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46751,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4725:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46754,
                  "mutability": "mutable",
                  "name": "auctionEndPrice",
                  "nameLocation": "4769:15:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46761,
                  "src": "4761:23:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46753,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4761:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46756,
                  "mutability": "mutable",
                  "name": "auctionTimestamp",
                  "nameLocation": "4803:16:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46761,
                  "src": "4795:24:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46755,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4795:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46758,
                  "mutability": "mutable",
                  "name": "auctionCaller",
                  "nameLocation": "4838:13:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46761,
                  "src": "4830:21:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 46757,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4830:7:101",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4686:172:101"
            },
            "returnParameters": {
              "id": 46760,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4877:0:101"
            },
            "scope": 46785,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 46766,
            "nodeType": "FunctionDefinition",
            "src": "4886:77:101",
            "nodes": [],
            "functionSelector": "34613dab",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "liquidateBorrow",
            "nameLocation": "4895:15:101",
            "parameters": {
              "id": 46764,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46763,
                  "mutability": "mutable",
                  "name": "borrowId",
                  "nameLocation": "4929:8:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46766,
                  "src": "4921:16:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46762,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4921:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4910:34:101"
            },
            "returnParameters": {
              "id": 46765,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4962:0:101"
            },
            "scope": 46785,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 46775,
            "nodeType": "FunctionDefinition",
            "src": "4971:91:101",
            "nodes": [],
            "functionSelector": "09f4cf3f",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "setBlacklisted",
            "nameLocation": "4980:14:101",
            "parameters": {
              "id": 46773,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46768,
                  "mutability": "mutable",
                  "name": "collateral",
                  "nameLocation": "5003:10:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46775,
                  "src": "4995:18:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 46767,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4995:7:101",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46770,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "5023:7:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46775,
                  "src": "5015:15:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46769,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5015:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46772,
                  "mutability": "mutable",
                  "name": "isBlacklisted_",
                  "nameLocation": "5037:14:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46775,
                  "src": "5032:19:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 46771,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5032:4:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4994:58:101"
            },
            "returnParameters": {
              "id": 46774,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5061:0:101"
            },
            "scope": 46785,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 46784,
            "nodeType": "FunctionDefinition",
            "src": "5070:89:101",
            "nodes": [],
            "functionSelector": "e7571483",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "isBlacklisted",
            "nameLocation": "5079:13:101",
            "parameters": {
              "id": 46780,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46777,
                  "mutability": "mutable",
                  "name": "collateral",
                  "nameLocation": "5101:10:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46784,
                  "src": "5093:18:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 46776,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5093:7:101",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 46779,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "5121:7:101",
                  "nodeType": "VariableDeclaration",
                  "scope": 46784,
                  "src": "5113:15:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 46778,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5113:7:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5092:37:101"
            },
            "returnParameters": {
              "id": 46783,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 46782,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 46784,
                  "src": "5153:4:101",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 46781,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5153:4:101",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5152:6:101"
            },
            "scope": 46785,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "abstract": false,
        "baseContracts": [],
        "canonicalName": "ICollateralManager",
        "contractDependencies": [],
        "contractKind": "interface",
        "fullyImplemented": false,
        "linearizedBaseContracts": [
          46785
        ],
        "name": "ICollateralManager",
        "nameLocation": "149:18:101",
        "scope": 46786,
        "usedErrors": []
      }
    ],
    "license": "AGPL-3.0"
  },
  "id": 101
}
```

</details>


# ICollateralManager

{% tabs %}
{% tab title="ICollateralManager.sol" %}

```solidity
// SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.16;

import { DataTypes } from "../protocol/libraries/types/DataTypes.sol";

interface ICollateralManager {
    struct UpdateVars {
        address borrowAsset;
        uint256 accruedBorrowAmount;
        uint256 updatedBorrowAmount;
    }

    /**
     * @dev Emitted when a borrow is created
     * @param initiator The address initiating the action
     */
    event BorrowCreated(
        address indexed initiator,
        address indexed onBehalfOf,
        uint256 indexed borrowId,
        address collateral,
        uint256 tokenId,
        uint256 tokenValue,
        address asset,
        uint256 amount,
        uint256 duration,
        uint256 borrowIndex,
        uint256 tokenizedId
    );

    /**
     * @dev Emitted when a borrow is updated
     * @param initiator The address initiating the action
     */
    event BorrowUpdated(
        address indexed initiator,
        uint256 indexed borrowId,
        address collateral,
        uint256 tokenId,
        address asset,
        uint256 amountAdded,
        uint256 amountTaken,
        uint256 borrowIndex
    );

    /**
     * @dev Emitted when a borrow is repaid by the borrower
     * @param initiator The address initiating the action
     */
    event BorrowRepaid(
        address indexed initiator,
        uint256 indexed borrowId,
        address collateral,
        uint256 tokenId,
        address asset,
        uint256 amount,
        uint256 borrowIndex
    );

    /**
     * @dev Emitted when a borrow is refinanced by the borrower
     * @param initiator The address initiating the action
     */
    event BorrowRefinanced(
        address indexed initiator,
        uint256 indexed borrowId,
        address collateral,
        uint256 tokenId,
        address asset,
        uint256 borrowAmount,
        uint256 amountAdded,
        uint256 amountTaken,
        uint256 duration,
        uint256 timestamp
    );

    /**
     * @dev Emitted when a borrow is liquidate by the liquidator
     * @param initiator The address initiating the action
     */
    event BorrowLiquidated(
        address indexed initiator,
        uint256 indexed borrowId,
        address collateral,
        uint256 tokenId,
        address asset,
        uint256 amount,
        uint256 borrowIndex
    );

    function borrowerOf(
        uint256 borrowId
    )
        external
        view
        returns(address);

    function getNumNftBorrows(address collateral) external view returns (uint256);

    function getNumUserNftBorrows(address user, address collateral) external view returns (uint256);

    function getBorrow(uint256 borrowId) external view returns (DataTypes.Borrow memory);

    function getBorrowId(address collateral, uint256 tokenId) external view returns (uint256); 

    function setBorrowStatus(
        uint256 borrowId,
        DataTypes.BorrowStatus status
    ) 
        external
        returns (bool);

    function createBorrow(
        address initiator,
        address onBehalfOf,
        address collateral,
        uint256 tokenId, 
        uint256 tokenValue, 
        address asset, 
        uint256 amount,
        uint256 duration,
        uint256 borrowIndex,
        uint256 reserveId
    ) 
        external 
        returns (
            uint256 borrowId,
            uint256 tokenizedId
        );

    function updateBorrow(
        address initiator,
        uint256 borrowId,
        uint256 amountAdded,
        uint256 amountTaken,
        uint256 borrowIndex
    )
        external;

    function repayBorrow(
        address initiator,
        uint256 borrowId,
        uint256 amount,
        uint256 borrowIndex
    )
        external;

    function refinanceBorrow(
        address initiator,
        uint256 borrowId,
        uint256 borrowAmount,
        uint256 amountAdded,
        uint256 amountTaken,
        uint256 duration
    )
        external;

    function getBorrowAmount(
        uint256 borrowId
    )
        external
        view
        returns (address, uint256, address, uint256);

    function getBorrowNumTokens(
        uint256 borrowId
    ) 
        external
        view
        returns (uint256);

    function getAuctionPrice(
        uint256 borrowId
    )
        external
        view
        returns (uint256);

    function getScaledAmount(
        uint256 borrowId
    )
        external
        view
        returns(address, uint256);

    function setBorrowAuctionCall(
        uint256 borrowId, 
        uint256 auctionStartPrice,
        uint256 auctionEndPrice,
        uint256 auctionTimestamp,
        address auctionCaller
    ) 
        external;

    function liquidateBorrow(
        uint256 borrowId
    )
        external;

    function setBlacklisted(address collateral, uint256 tokenId, bool isBlacklisted_) external;

    function isBlacklisted(address collateral, uint256 tokenId) external view returns (bool);
}
```

{% endtab %}

{% tab title="DataTypes.sol" %}

```solidity
// SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.16;

library DataTypes {

    /// -----------------------------------------------------------------------
    /// Exec
    /// -----------------------------------------------------------------------
    
    struct ExecItemParams {
        address target;
        bytes payload;
    }

    struct ExecBatchItemParams {
        address[] targets;
        bytes[] payloads;
        bool[] allowErrors;
    }

    /// -----------------------------------------------------------------------
    /// P2Pool
    /// -----------------------------------------------------------------------

    enum BorrowStatus { 
        None, // Default zero
        Active, // Open
        Repaid, // Closed, paid by borrower
        Auction, // In Auction
        Liquidated // Closed, paid by liquidator
    }

    enum PriceGroupStatus {
        None, // Default zero
        Active, // Able to set / get prices
        Paused, // Not able to perform any operation
        Protected // Only able to get prices
    }
    
    struct Reserve {
        ReserveConfigurationMap configuration;
        address collateral;
        address asset;
        address fTokenAddress;
        address stableDebtTokenAddress;
        address variableDebtTokenAddress;
        address interestRateAddress;
        string assetPriceFeed;
        uint256 id;
        uint256 maxTokenSupply;
        uint256 maxTokenId;
        uint256 minTokenId;
        uint128 liquidityIndex;
        uint128 variableBorrowIndex;
        uint128 currentLiquidityRate;
        uint128 currentVariableBorrowRate;
        uint40 lastUpdateTimestamp;
    }

    struct ReserveData {
        address collateral;
        address asset;
        uint256 maxTokenId;
        uint256 minTokenId;
    }

    struct InitReserveData {
        uint256 reserveId;
        address collateral;
        address asset;
        uint256 maxTokenId;
        uint256 minTokenId;
        address fTokenAddress;
        address stableDebtTokenAddress;
        address variableDebtTokenAddress;
        address interestRateAddress;
        string assetPriceFeed;
    }

    struct ReserveConfigurationMap {
        //bit 0-15: LTV
        //bit 16-31: Liq. threshold
        //bit 32-47: Liq. bonus
        //bit 48-55: Decimals
        //bit 56: Reserve is active
        //bit 57: reserve is frozen
        //bit 58: borrowing is enabled
        //bit 59: variable rate borrowing enabled
        //bit 60-63: reserved
        //bit 64-79: reserve factor
        //bit 80-95: grace period
        //bit 96-111: auction duration
        //bit 112-127: auction start price multiple
        uint256 data;
    }

    struct NFTPriceGroup {
        NFTPriceGroupConfigurationMap configuration;
        PriceGroupStatus status;
        address[15] nfts;
        uint256[15] reserveIds; 
        uint256[15] traitIds; 
        uint256[15] basePrices;
        uint256 id;
    } 

    struct NFTPriceGroupConfigurationMap {
        //bit 0-15: DELTA_01
        //bit 16-31: DELTA_02
        //bit 32-47: DELTA_03
        //bit 48-63: DELTA_04
        //bit 64-79: DELTA_05
        //bit 80-95: DELTA_06
        //bit 96-111: DELTA_07
        //bit 112-127: DELTA_08
        //bit 128-143: DELTA_09
        //bit 144-159: DELTA_10
        //bit 160-175: DELTA_11
        //bit 176-191: DELTA_12
        //bit 192-207: DELTA_13
        //bit 208-223: DELTA_14
        //bit 224-239: DELTA_15
        //bit 240: SIGN_01
        //bit 241: SIGN_02
        //bit 242: SIGN_03
        //bit 243: SIGN_04
        //bit 244: SIGN_05
        //bit 245: SIGN_06
        //bit 246: SIGN_07
        //bit 247: SIGN_08
        //bit 248: SIGN_09
        //bit 249: SIGN_10
        //bit 250: SIGN_11
        //bit 251: SIGN_12
        //bit 252: SIGN_13
        //bit 253: SIGN_14
        //bit 254: SIGN_15
        uint256 data;
    }

    struct Auction {
        address caller;
        uint256 startPrice;
        uint256 endPrice;
        uint256 timestamp;
    }

    struct Borrow {
        BorrowStatus status;
        Collateral collateral;
        Auction auction;
        address borrower;
        address erc20Token;
        uint256 borrowAmount; 
        uint256 scaledAmount;
        uint256 timestamp;
        uint256 duration;
        uint256 reserveId;
        uint256 tokenizedId;
    }

    struct ExecuteDepositParams {
        address initiator;
        uint256 amount;
        uint256 reserveId;
        address onBehalfOf;
        uint16 referralCode;
    }

    struct ExecuteBatchDepositParams {
        address initiator;
        uint256[] amounts;
        uint256[] reserveIds;
        address[] onBehalfOfs;
        uint16[] referralCodes;
    }

    struct ExecuteWithdrawParams {
        address initiator;
        uint256 amount;
        uint256 reserveId;
        address to;
    }

    struct ExecuteBatchWithdrawParams {
        address initiator;
        uint256[] amounts;
        uint256[] reserveIds;
        address[] tos;
    }

    struct ExecuteBorrowParams {
        address initiator;
        uint256 amount;
        uint256 tokenId;
        uint256 tokenValue;
        uint256 reserveId;
        uint256 duration;
        address onBehalfOf;
        uint16 referralCode;
    }

    struct ExecuteBatchBorrowParams {
        address initiator;
        uint256[] amounts;
        uint256[] tokenIds;
        uint256[] tokenValues;
        uint256[] reserveIds;
        uint256 duration;
        address onBehalfOf;
        uint16 referralCode;
    }

    struct ExecuteRepayParams {
        address initiator;
        uint256 borrowId;
        uint256 amount;
    }

    struct ExecuteBatchRepayParams {
        address initiator;
        uint256[] borrowIds;
        uint256[] amounts;
    }

    struct ExecuteRefinanceParams {
        address initiator;
        uint256 borrowId;
        uint256 amount;
        uint256 duration;
    }

    struct ExecuteBatchRefinanceParams {
        address initiator;
        uint256[] borrowIds;
        uint256[] amounts;
        uint256[] durations;
    }

    struct ExecuteAuctionParams {
        address initiator;
        uint256 borrowId;
        address onBehalfOf;
    }

    struct ExecuteBatchAuctionParams {
        address initiator;
        uint256[] borrowIds;
        address[] onBehalfOfs;
    }

    struct ExecuteBidParams {
        address initiator;
        address asset;
        uint256 amount;
        uint256 borrowId;
        address onBehalfOf;
    }

    struct ExecuteBatchBidParams {
        address initiator;
        address[] assets;
        uint256[] amounts;
        uint256[] borrowIds;
        address[] onBehalfOfs;
    }

    /// -----------------------------------------------------------------------
    /// Tokenized 
    /// -----------------------------------------------------------------------

    struct TokenizedLoan {
        address collateral;
        uint256 tokenId;
        uint256 id;
    }

    /// -----------------------------------------------------------------------
    /// P2Peer
    /// -----------------------------------------------------------------------

    enum LoanStatus {
        None, // Default zero
        Escrow, // Open
        Repaid, // Closed, lender received repayment 
        Refinanced, // Closed, lender received repayment 
        Foreclosed // Closed, lender received collateral
    }

    enum Side { Offer,  Listing }

    enum SignatureVersion { Single, Bulk }

    enum CollateralType { ERC721, ERC1155 } //TODO

    enum LoanType {
        Loan,
        Trait,
        Collection,
        Bundle,
        Renegotiation,
        Refinancing
    }

    struct Terms {
        LoanType loanType;
        /* Order collaterlTypes - empty item if not isBundle. */
        CollateralType[] collateralTypes;
        CollateralType collateralType;
        /* Order collaterals & tokenIds - empty if not isBundle. */
        address[] collaterals;
        uint256[] tokenIds;
        /* Order values - empty item if not ERC1155. */
        uint256[] values;
        /* Order collateral & tokenId - address(0) if isBundle. */
        address collateral;
        uint256 tokenId;
        /* Order value - empty item if not ERC1155. */
        uint256 value;
        address asset;
        uint256 amount;
        /* Order maximumRepayment - used for both fixed price and pro-rata loans. */
        uint256 maximumRepayment;
        /* Order minimumRepayment - used for pro-rata loans, 0 if none */
        uint256 minimumRepayment;
        /* Order interestRateInBasisPoints - used for pro-rata loans. */
        uint256 interestRateInBasisPoints; 
        uint256 duration;
        /* Loan isProRata - used enable pro-rata loan repayments. */
        bool isProRata;
        bool isBundle;
        /* Order loanId - 0 if creating a new loan. */
        uint256 loanId;
        /* Order fee - paid on renegotiation. */
        uint256 fee;
    }

    struct Order {
        address user;
        /* Referrer - for new loans & refinancing (borrower-side). */
        address referrer;
        Side side;
        Terms terms;
        /* Order counterparty - address(0) for open order. */
        address counterparty;
        bool isInstantExecution; 
        /* Order loanRepayment - for refinancing. */
        uint256 loanRepayment;
        uint256 listingTime;
        uint256 expirationTime;
        uint256 salt;
        /* Order message - for renegotiations. */
        string message;
        bytes extraParams;
        /* Borrow Id - for p2pool orders. */
        uint256 borrowId;
        /* Reserve Id - for fToken orders. */
        uint256 reserveId;
    }

    struct Input {
        Order order;
        uint8 v;
        bytes32 r;
        bytes32 s;
        bytes extraSignature;
        SignatureVersion signatureVersion;
        uint256 blockNumber;
    }

    struct Execution {
        Input offer;
        Input listing;
    }

    struct Collateral {
        /* Loan collateralType - ERC721 or ERC1155. */
        CollateralType collateralType;
        address collateral;
        uint256 tokenId;
        /* Loan value - collateral token amount (ERC1155, only). */
        uint256 value;
    }

    struct Collaterals {
        /* Loan collateralType - ERC721 or ERC1155. */
        CollateralType[] collateralTypes;
        address[] collaterals;
        uint256[] tokenIds;
        /* Loan value - collateral token amount (ERC1155, only). */
        uint256[] values;
    }

    struct Principal {
        address asset;
        uint256 amount;
    }

    struct Interest {
        /* Loan:Interest rate - in basis points (1/100th of a percent), used in pro-rata loans. */
        uint256 rate;
        /* Loan.Interest isProRata - to enable pro-rata loan repayments. */
        bool isProRata;
    }

    struct Repayment {
        /* Loan Repayment.maximum - used in both fixed price & pro-rata loans. */
        uint256 maximum;
        /* Loan Repayment.minimum - (optional) used in pro-rata loans. */
        uint256 minimum;
    }

    struct Loan {
        LoanStatus status;
        Collateral collateral;
        Principal principal;
        Interest interest;
        Repayment repayment;
        address borrower;
        address lender;
        address referrer;
        uint256 timestamp;
        uint256 duration;
        /* Loan tokenizedId - tokenId of promissoryNote and obligationReceipt. */
        uint256 tokenizedId;
    }

    struct LoanBundle {
        LoanStatus status;
        Collaterals collaterals;
        Principal principal;
        Interest interest;
        Repayment repayment;
        address borrower;
        address lender;
        address referrer;
        uint256 timestamp;
        uint256 duration;
        /* Loan tokenizedId - tokenId of promissoryNote and obligationReceipt. */
        uint256 tokenizedId;
    } 

    struct ExecuteNewLoanParams {
        DataTypes.Terms terms;
        address borrower;
        address lender;
        address referrer;
        /* Borrow Id - for p2pool Orders */
        uint256 borrowId;
        /* Reserve Id - for fToken Orders */
        uint256 reserveId;
    }

    struct ExecuteRepayLoanParams {
        uint256 loanId;
        uint256 lendingFactor;
        /* Reserve Id - for fToken repayment */
        uint256 reserveId;
    }

    struct ExecuteForecloseLoanParams {
        uint256 loanId;
    }

    struct ExecuteRenegotiateLoanParams {
        DataTypes.Terms terms;
        address borrower;
        address lender;
        /* Reserve Ids - for fToken Orders */
        uint256 borrowerReserveId;
        uint256 lenderReserveId;
    }

    struct ExecuteRefinanceLoanParams {
        DataTypes.Terms terms;
        address borrower;
        address lender;
        address referrer;
        uint256 loanRepayment;
        uint256 lendingFactor;
        /* Reserve Ids - for fToken Orders */
        uint256 borrowerReserveId;
        uint256 lenderReserveId;
    }
}
```

{% endtab %}
{% endtabs %}


# LendingPool

The `LendingPool` contract is the main contract for user interaction. It exposes all user-oriented actions and can be invoked by Solidity or web3 libraries.

## Methods <a href="#functionality" id="functionality"></a>

### initReserve()[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#functionality) <a href="#functionality" id="functionality"></a>

**`function initReserve(ConfigTypes.InitReserveInput input, address fToken, address stableDebtToken, address variableDebtToken)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Initialises a reserve.

<table><thead><tr><th width="227.33333333333331">Parameter Name</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code>input</code></td><td>ConfigTypes.InitReserveInput</td><td>The init reserve input parameters</td></tr><tr><td><code>fToken</code></td><td>address</td><td>fToken proxy address</td></tr><tr><td><code>stableDebtToken</code></td><td>address</td><td>stableDebtToken proxy address</td></tr><tr><td><code>variableDebtToken</code></td><td>address</td><td>variableDebtToken proxy address</td></tr></tbody></table>

### deposit()

**`function deposit(uint256 amount, uint256 reserveId, address onBehalfOf, uint16 referralCode)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#deposituint256-amount-uint256-reserveid-address-onbehalfof-uint16-referralcode)

Deposits assets into the lending pool.

| Parameter Name | Type    | Description                                                                                            |
| -------------- | ------- | ------------------------------------------------------------------------------------------------------ |
| amount         | uint256 | amount deposited, expressed in wei units                                                               |
| reserveId      | uint256 | id of the targeted reserve                                                                             |
| onBehalfOf     | address | address whom will receive the fTokens. Use `msg.sender when the fTokens should be sent to the caller.` |
| referralCode   | uint256 | referral code for our referral program. 0 for no referral.                                             |

### batchDeposit()

`function batchDeposit(uint256[] calldata amounts, uint256[] reserveIds, address[] calldata onBehalfOfs, uint16[] referralCodes)`

Batches deposits of assets across lending pools.

| Parameter Name | Type                | Description                               |
| -------------- | ------------------- | ----------------------------------------- |
| amounts        | uint256\[] calldata | amounts deposited, expressed in wei units |
| reserveIds     | uint256\[] calldata | ids of the targeted reserves              |
| onBehalfOfs    | address\[] calldata | addresses whom will receive the fTokens   |
| referralCodes  | uint256\[] calldata | referral codes for our referral program   |

### withdraw()

**`function withdraw(uint256 amount, uint256 reserveId, address to)`**

Withdraws assets from the lending pool.

| Parameter Name | Type    | Description                                    |
| -------------- | ------- | ---------------------------------------------- |
| amount         | uint256 | amount withdrawn, expressed in wei units       |
| reserveId      | uint256 | id of the targeted reserve                     |
| to             | address | address to receive the underlying asset tokens |

### batchWithdraw()

**`function batchWithdraw(uint256[] calldata amounts, uint256[] calldata reserveIds, address[] calldata tos)`**

Batches withdraws of assets across lending pools.

| Parameter Name | Type                | Description                                      |
| -------------- | ------------------- | ------------------------------------------------ |
| amounts        | uint256\[] calldata | amounts withdrawn, expressed in wei units        |
| reserveIds     | uint256\[] calldata | ids of the targeted reserves                     |
| tos            | address\[] calldata | addresses to receive the underlying asset tokens |

### **borrow()**

**`function borrow(uint256 amount, uint256 tokenId, uint256 tokenValue, uint256 reserveId, uint256 duration, address onBehalfOf, uint16 referralCode)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#borrowuint256-amount-uint256-tokenid-uint256-reserveid-address-onbehalfof-uint16-referralcode)

Creates a borrow position.

| Parameter Name | Type    | Description                                         |
| -------------- | ------- | --------------------------------------------------- |
| amount         | uint256 | amount borrowed, expressed in wei units             |
| tokenId        | uint256 | tokenId of the NFT to be deposited                  |
| tokenValue     | uint256 | number of ERC1155 tokens supplied, 0 implies ERC721 |
| reserveId      | uint256 | id of the targeted reserve                          |
| duration       | uint256 | duration of the loan, 0 implies open-ended          |
| onBehalfOf     | address | address to receive the loan                         |
| referralCode   | uint16  | referral codes for our referral program             |

### batchBorrow()

**`function batchBorrow(uint256[] calldata amounts, uint256[] calldata tokenIds, uint256[] calldata tokenValues, uint256[] calldata reserveIds, uint256 duration, address onBehalfOf, uint16 referralCode)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#borrowuint256-amount-uint256-tokenid-uint256-reserveid-address-onbehalfof-uint16-referralcode)

Batches borrow position execution. Note, only single duration batches are supported.

| Parameter Name | Type                | Description                                          |
| -------------- | ------------------- | ---------------------------------------------------- |
| amounts        | uint256\[] calldata | amounts borrowed, expressed in wei units             |
| tokenIds       | uint256\[] calldata | tokenId sof the NFTs to be deposited                 |
| tokenValues    | uint256\[] calldata | numbers of ERC1155 tokens supplied, 0 implies ERC721 |
| reserveIds     | uint256\[] calldata | ids of the targeted reserves                         |
| duration       | uint256             | duration of the loan, 0 implies open-ended           |
| onBehalfOf     | address             | address to receive the loan                          |
| referralCode   | uint16              | referral codes for our referral program              |

### **repay()**

**`function repay(uint256 borrowId, uint256 amount)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#repayaddress-collateral-uint256-tokenid-uint256-amount)

Repays a borrow position.

| Parameter Name | Type    | Description                           |
| -------------- | ------- | ------------------------------------- |
| borrowId       | uint256 | id of the targeted borrow             |
| amount         | uint256 | amount to be repaid, expressed in wei |

### batchRepay()

**`function batchRepay(uint256[] calldata borrowIds, uint256[] calldata amounts)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#repayaddress-collateral-uint256-tokenid-uint256-amount)

Batch repays borrow positions.

| Parameter Name | Type                | Description                            |
| -------------- | ------------------- | -------------------------------------- |
| borrowIds      | uint256\[] calldata | ids of the targeted borrows            |
| amounts        | uint256\[] calldata | amounts to be repaid, expressed in wei |

### refinance()

**`function refinance(uint256 borrowId, uint256 amount, uint256 duration)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#repayaddress-collateral-uint256-tokenid-uint256-amount)

Refinances a borrow position.

{% hint style="info" %}
If the refinance amount is less than the current loan amount this is treated as a partial repayment with the difference being requested for transfer from the borrower's wallet.

If the refinance amount is more than the current loan amount then this debt is added to their balance and the additional funds are sent to their wallet.
{% endhint %}

| Parameter Name | Type    | Description                                       |
| -------------- | ------- | ------------------------------------------------- |
| borrowId       | uint256 | id of the targeted borrow                         |
| amount         | uint256 | refinanced loan amount, expressed in wei          |
| duration       | uint256 | duration of the refinanced loan, 0 for open-ended |

### batchRefinance()

**`function batchRefinance(uint256[]calldata borrowIds, uint256[]calldata amounts, uint256[]calldata durations)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#repayaddress-collateral-uint256-tokenid-uint256-amount)

Batches refinancing of borrow positions.

| Parameter Name | Type                | Description                                       |
| -------------- | ------------------- | ------------------------------------------------- |
| borrowIds      | uint256\[] calldata | ids of the targeted borrows                       |
| amounts        | uint256\[] calldata | refinanced loan amounts, expressed in wei         |
| durations      | uint256\[] calldata | duration of the refinanced loan, 0 for open-ended |

### auction()

**`function auction(uint256 borrowId, address onBehalfOf)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#repayaddress-collateral-uint256-tokenid-uint256-amount)

Triggers a liquidation auction on a loan in default.

| Parameter Name | Type    | Description                                 |
| -------------- | ------- | ------------------------------------------- |
| borrowId       | uint256 | id of the targeted borrow                   |
| onBehalfOf     | address | address to receive the auction caller bonus |

### batchAuction()

**`function batchAuction(uint256[] calldata borrowIds, address[] calldata onBehalfOfs)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#repayaddress-collateral-uint256-tokenid-uint256-amount)

Batch triggers liquidation auctions on loans in default.

| Parameter Name | Type                | Description                                     |
| -------------- | ------------------- | ----------------------------------------------- |
| borrowIds      | uint256\[] calldata | ids of the targeted borrows                     |
| onBehalfOfs    | address\[] calldata | addresses to receive the auction caller bonuses |

### bid()

**`function bid(uint256 borrowId, address onBehalfOf)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#repayaddress-collateral-uint256-tokenid-uint256-amount)

Purchases the underlying NFT of a loan under auction.

| Parameter Name | Type    | Description                           |
| -------------- | ------- | ------------------------------------- |
| asset          | address | address of the asset used for payment |
| amount         | uint256 | amount to be paid, expressed in wei   |
| borrowId       | uint256 | id of the targeted borrow             |
| onBehalfOf     | address | address to receive the underlying NFT |

### batchBid()

**`function batchBid(uint256[] calldata borrowIds, address[] calldata onBehalfOfs)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#repayaddress-collateral-uint256-tokenid-uint256-amount)

Batch purchases the underlying NFTs of loans under auction.

| Parameter Name | Type                | Description                              |
| -------------- | ------------------- | ---------------------------------------- |
| assets         | address\[] calldata | addresses of the assets used for payment |
| amounts        | uint256\[] calldata | amounts to be paid, expressed in wei     |
| borrowIds      | uint256\[] calldata | ids of the targeted borrows              |
| onBehalfOfs    | address\[] calldata | addresses to receive the underlying NFTs |

### setMaxNumberOfReserves()

**`function setMaxNumberOfReserves(uint256 val)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#repayaddress-collateral-uint256-tokenid-uint256-amount)

Sets the max number of reserves.

| Parameter Name | Type    | Description            |
| -------------- | ------- | ---------------------- |
| val            | uint256 | max number of reserves |

### setReserveMaxSupply()

**`function setReserveMaxSupply(uint256 reserveId, uint256 maxTokenSupply)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#repayaddress-collateral-uint256-tokenid-uint256-amount)

Sets the max number of NFTs that can be used as collateral within a reserve.

| Parameter Name | Type    | Description                                       |
| -------------- | ------- | ------------------------------------------------- |
| reserveId      | uint256 | id of the targeted reserve                        |
| maxTokenSupply | uint256 | max number of NFTs that can be used as collateral |

### setReserveInterestRateAddress()

**`function setReserveInterestRateAddress(uint256 reserveId, address rateAddress)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#repayaddress-collateral-uint256-tokenid-uint256-amount)

Sets the interest rate model strategy for a reserve.

| Parameter Name | Type    | Description                                 |
| -------------- | ------- | ------------------------------------------- |
| reserveId      | uint256 | id of the targeted reserve                  |
| rateAddress    | address | address of the interest rate model strategy |

### setReserveConfiguration()

**`function setReserveConfiguration(uint256 reserveId, uint256 reserveConfiguration)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#repayaddress-collateral-uint256-tokenid-uint256-amount)

Sets the configuration bitmap of a reserve.

| Parameter Name | Type    | Description                |
| -------------- | ------- | -------------------------- |
| reserveId      | uint256 | id of the targeted reserve |
| configuration  | uint256 | new configuration bitmap   |

### setReserveCreatorAddress()

**`function setReserveCreatorAddress(uint256 reserveId, address creator)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#repayaddress-collateral-uint256-tokenid-uint256-amount)

Sets the creator address for a reserve

| Parameter Name | Type    | Description                |
| -------------- | ------- | -------------------------- |
| reserveId      | uint256 | id of the targeted reserve |
| creator        | address | address for the creator    |

### setReserveCreatorPercentage()

**`function setReserveCreatorPercentage(uint256 reserveId, uint256 percentage)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#repayaddress-collateral-uint256-tokenid-uint256-amount)

Sets the percentage of protocol fees that go to the creator.

| Parameter Name | Type    | Description                                       |
| -------------- | ------- | ------------------------------------------------- |
| reserveId      | uint256 | id of the targeted reserve                        |
| percentage     | uint256 | percentage in percentage-maths: e.g. 5000 for 50% |

### setPause()

**`function setPause(bool val)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#repayaddress-collateral-uint256-tokenid-uint256-amount)

Sets the pause state of the lending pool

| Parameter Name | Type | Description    |
| -------------- | ---- | -------------- |
| val            | bool | true if paused |

### setPausedTime()

**`function setPausedTime(uint256 startTime, uint256 duration)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#repayaddress-collateral-uint256-tokenid-uint256-amount)

Sets the pause state of the lending pool for a given start time and duration.

| Parameter Name | Type    | Description      |
| -------------- | ------- | ---------------- |
| startTime      | uint256 | pause start time |
| duration       | uint256 | pause duration   |

## View Methods <a href="#lendingpoolstoragesol" id="lendingpoolstoragesol"></a>

### paused()

**`function paused()`**

Returns `true` if the lending pool is paused.

### getPausedTime()

**`function getPausedTime()`**

Returns the start and duration of the lending pool pause time.

#### Return values

| Parameter Name | Type    | Description       |
| -------------- | ------- | ----------------- |
| `startTime`    | uint256 | Paused start time |
| `duration`     | uint256 | Paused duration   |

### getAddressProvider()

**`function getAddressProvider()`**

Returns the address provider.

### getMaxNumberOfReserves()

**`function getMaxNumberOfReserves()`**

Returns the maximum number of reserves

### getReserve()

**`function getReserve(uint256 reserveId)`**

Returns the state and configuration of the reserve.

#### Return values

<table><thead><tr><th width="298.3333333333333">Parameter Name</th><th width="109">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>configuration</code></td><td>uint256</td><td><p>Uses a bitmask.<br>bit 16-31: Liq. threshold</p><p>bit 32-47: Liq. bonus</p><p>bit 48-55: Decimals</p><p>bit 56: Reserve is active</p><p>bit 57: reserve is frozen</p><p>bit 58: borrowing is enabled</p><p>bit 59: variable rate borrowing enabled</p><p>bit 60-63: reserved</p><p>bit 64-79: reserve factor</p><p>bit 80-95: grace period</p><p>bit 96-111: auction duration</p><p>bit 112-127: auction start price multiple<br>*All % are 1e4, ie. percentage plus two decimals</p></td></tr><tr><td><code>collateral</code></td><td>address</td><td>address of NFT permitted as collateral</td></tr><tr><td><code>asset</code></td><td>address</td><td>address of asset avaiable to be borrowed</td></tr><tr><td><code>fTokenAddress</code></td><td>address</td><td>address of fToken proxy contract</td></tr><tr><td><code>stableDebtTokenAddress</code></td><td>address</td><td>address of stableDebtToken proxy contract</td></tr><tr><td><code>variableDebtTokenAddress</code></td><td>address</td><td>address of variableDebtToken proxy contract</td></tr><tr><td><code>interestRateAddress</code></td><td>address</td><td>address of interest rate strategy model</td></tr><tr><td><code>assetPriceFeed</code></td><td>string</td><td>name of Chainlink Oracle price feed</td></tr><tr><td><code>id</code></td><td>uint256</td><td>id of the reserve</td></tr><tr><td><code>maxTokenSupply</code></td><td>uint256</td><td>max token supply that can be used as collateral</td></tr><tr><td><code>maxTokenId</code></td><td>uint256</td><td>max token id that can be used as collateral</td></tr><tr><td><code>minTokenId</code></td><td>uint256</td><td>min tokne id that can be used as collateral</td></tr><tr><td><code>liquidityIndex</code></td><td>uint128</td><td>liquidity index in ray</td></tr><tr><td><code>variableBorrowIndex</code></td><td>uint128</td><td>variable borrow index in ray</td></tr><tr><td><code>currentLiquidityRate</code></td><td>uint128</td><td>current supply / liquidity / deposit rate in ray</td></tr><tr><td><code>currentVariableBorrowRate</code></td><td>uint128</td><td>current variable borrow rate in ray</td></tr><tr><td><code>lastUpdateTimestamp</code></td><td>uint40</td><td>timestamp of when reserve data was last updated</td></tr></tbody></table>

### getReserveId()

**`function getReserveId(address collateral, address asset, uint256 maxTokenId, uint256 minTokenId)`**

Returns the `id` of the associated reserve.

#### Return values

### getReserveConfiguration()

**`function getReserveConfiguration(uint256 reserveId)`**

Returns the configuration of a reserve.

#### Return values

<table><thead><tr><th width="185.33333333333331">Parameter Name</th><th width="283">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>configuration</code></td><td>DataTypes.ReserveConfigurationMap memory</td><td>configuration of the reserve</td></tr></tbody></table>

### getReserveNormalizedIncome()

**`function getReserveNormalizedIncome(uint256 reserveId)`**

Returns the normalised income of a reserve.

### getReserveNormalizedVariableDebt()

**`function getReserveNormalizedVariableDebt(uint256 reserveId)`**

Returns the normalised variable debt of a reserve.

### getReserveUserStableRate()

**`function getReserveUserStableRate(uint256 reserveId, address user)`**

Returns a reserve user stable rate.

### getReserveFlags()

**`function getReserveFlags(uint256 reserveId)`**

Returns the reserve flags.

#### Return values

<table><thead><tr><th width="268.3333333333333">Parameter Name</th><th width="87">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>activeReserve</code></td><td>bool</td><td>true if reserve is active</td></tr><tr><td><code>frozenReserve</code></td><td>bool</td><td>true if reserve is frozen</td></tr><tr><td><code>borrowingEnabled</code></td><td>bool</td><td>true if borrowing is enabled on the reserve</td></tr><tr><td><code>variableBorrowEnabled</code></td><td>bool</td><td>true if variable rate borrowing is enabled</td></tr></tbody></table>

### getReservesList()

**`function getReservesList()`**

Returns a list of reserve `ids`.

### getInitializedCollaterals()

**`function getInitializedCollaterals()`**

Returns a list of addresses of initialized `collaterals`.

### getInitializedAssets()

**`function getInitializedAssets()`**

Returns a list of addresses of initialized `assets`.

### getBorrowHealthFactor()

**`function getborrowHealthFactor(uint256 borrowId)`**

Returns the collateral price, borrow amount and health factor for a given borrow id.

#### Return values

<table><thead><tr><th width="268.3333333333333">Parameter Name</th><th width="104">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>collateralPrice</code></td><td>uint256</td><td>the current appraised price of the collateral</td></tr><tr><td><code>borrowAmount</code></td><td>uint256</td><td>the amount borrowed against the collateral</td></tr><tr><td><code>healthFactor</code></td><td>uint256</td><td>the current health factor of the borrow</td></tr></tbody></table>

### getAuctionConfiguration()

**`function getAuctionConfiguration(uint256 reserveId)`**

Returns the auction liquidation bonus and duration.

#### Return values

<table><thead><tr><th width="268.3333333333333">Parameter Name</th><th width="104">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>liquidationBonus</code></td><td>uint256</td><td>the percentage of the auction going to stakeholders, e.g. 1000 for 10%</td></tr><tr><td><code>duration</code></td><td>uint256</td><td>the auction duration in days</td></tr></tbody></table>

### finalizeTransfer()

**`function finalizeTransfer(uint256 reserveId, address from, address to, uint256 amount, uint256 balanceFromBefore, uint256 balanceToBefore)`**

Validates and finalises an fToken transfer.

## Storage

Inherited contract `LendingPoolStorage.sol` is used to maintain state, separating this from the Lending Pool contract. This follows specific guidelines for the process of adding new variables; to ensure compatibility and upgradability.

## Error Codes

In order to reduce gas usage and code size, FluidNFT contracts return numbered errors. If you are making calls to the protocol and receive numb

## ABI

<details>

<summary>LendingPool ABI</summary>

```
{
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "initiator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "duration",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "collateral",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "onBehalfOf",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "borrowRate",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "borrowId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint16",
          "name": "referral",
          "type": "uint16"
        }
      ],
      "name": "Borrow",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "initiator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "collateral",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "onBehalfOf",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint16",
          "name": "referalCode",
          "type": "uint16"
        }
      ],
      "name": "Deposit",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "collateral",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "borrowId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "paymentAsset",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "paymentAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "onBehalfOf",
          "type": "address"
        }
      ],
      "name": "Liquidate",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "startTime",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "durationTime",
          "type": "uint256"
        }
      ],
      "name": "PausedTimeUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "initiator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "borrowId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "collateral",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amountAdded",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amountTaken",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "defaultFee",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "duration",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "Refinanced",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "initiator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "collateral",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "borrowId",
          "type": "uint256"
        }
      ],
      "name": "Repay",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "initiator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "collateral",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "Withdraw",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "borrowId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "onBehalfOf",
          "type": "address"
        }
      ],
      "name": "auction",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "borrowIds",
          "type": "uint256[]"
        },
        {
          "internalType": "address[]",
          "name": "onBehalfOfs",
          "type": "address[]"
        }
      ],
      "name": "batchAuction",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "assets",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "borrowIds",
          "type": "uint256[]"
        },
        {
          "internalType": "address[]",
          "name": "onBehalfOfs",
          "type": "address[]"
        }
      ],
      "name": "batchBid",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "tokenIds",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "tokenValues",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "reserveIds",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256",
          "name": "duration",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "onBehalfOf",
          "type": "address"
        },
        {
          "internalType": "uint16",
          "name": "referralCode",
          "type": "uint16"
        }
      ],
      "name": "batchBorrow",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "reserveIds",
          "type": "uint256[]"
        },
        {
          "internalType": "address[]",
          "name": "onBehalfOfs",
          "type": "address[]"
        },
        {
          "internalType": "uint16[]",
          "name": "referralCodes",
          "type": "uint16[]"
        }
      ],
      "name": "batchDeposit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "borrowIds",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "durations",
          "type": "uint256[]"
        }
      ],
      "name": "batchRefinance",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "borrowIds",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        }
      ],
      "name": "batchRepay",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "reserveIds",
          "type": "uint256[]"
        },
        {
          "internalType": "address[]",
          "name": "tos",
          "type": "address[]"
        }
      ],
      "name": "batchWithdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "borrowId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "onBehalfOf",
          "type": "address"
        }
      ],
      "name": "bid",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "tokenValue",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "duration",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "onBehalfOf",
          "type": "address"
        },
        {
          "internalType": "uint16",
          "name": "referralCode",
          "type": "uint16"
        }
      ],
      "name": "borrow",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "onBehalfOf",
          "type": "address"
        },
        {
          "internalType": "uint16",
          "name": "referralCode",
          "type": "uint16"
        }
      ],
      "name": "deposit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "executionDelegate",
      "outputs": [
        {
          "internalType": "contract IExecutionDelegate",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "balanceFromBefore",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "balanceToBefore",
          "type": "uint256"
        }
      ],
      "name": "finalizeTransfer",
      "outputs": [],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getAddressProvider",
      "outputs": [
        {
          "internalType": "contract IAddressProvider",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        }
      ],
      "name": "getAuctionConfiguration",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "borrowId",
          "type": "uint256"
        }
      ],
      "name": "getBorrowHealthFactor",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getInitializedAssets",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getInitializedCollaterals",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getMaxNumberOfReserves",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getPausedTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        }
      ],
      "name": "getReserve",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "data",
                  "type": "uint256"
                }
              ],
              "internalType": "struct DataTypes.ReserveConfigurationMap",
              "name": "configuration",
              "type": "tuple"
            },
            {
              "internalType": "address",
              "name": "collateral",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "asset",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "fTokenAddress",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "stableDebtTokenAddress",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "variableDebtTokenAddress",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "interestRateAddress",
              "type": "address"
            },
            {
              "internalType": "string",
              "name": "assetPriceFeed",
              "type": "string"
            },
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxTokenSupply",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxTokenId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "minTokenId",
              "type": "uint256"
            },
            {
              "internalType": "uint128",
              "name": "liquidityIndex",
              "type": "uint128"
            },
            {
              "internalType": "uint128",
              "name": "variableBorrowIndex",
              "type": "uint128"
            },
            {
              "internalType": "uint128",
              "name": "currentLiquidityRate",
              "type": "uint128"
            },
            {
              "internalType": "uint128",
              "name": "currentVariableBorrowRate",
              "type": "uint128"
            },
            {
              "internalType": "uint40",
              "name": "lastUpdateTimestamp",
              "type": "uint40"
            }
          ],
          "internalType": "struct DataTypes.Reserve",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        }
      ],
      "name": "getReserveConfiguration",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "data",
              "type": "uint256"
            }
          ],
          "internalType": "struct DataTypes.ReserveConfigurationMap",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        }
      ],
      "name": "getReserveFlags",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        },
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        },
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        },
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "collateral",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "maxTokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "minTokenId",
          "type": "uint256"
        }
      ],
      "name": "getReserveId",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        }
      ],
      "name": "getReserveNormalizedIncome",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        }
      ],
      "name": "getReserveNormalizedVariableDebt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "getReserveUserStableRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getReservesList",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "reservesList",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "underlyingCollateral",
              "type": "address"
            },
            {
              "internalType": "string",
              "name": "underlyingCollateralName",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "underlyingCollateralSymbol",
              "type": "string"
            },
            {
              "internalType": "uint256",
              "name": "underlyingMaxTokenId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "underlyingMinTokenId",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "underlyingAsset",
              "type": "address"
            },
            {
              "internalType": "string",
              "name": "underlyingAssetName",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "underlyingAssetSymbol",
              "type": "string"
            },
            {
              "internalType": "uint8",
              "name": "underlyingAssetDecimals",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "fTokenImpl",
              "type": "address"
            },
            {
              "internalType": "string",
              "name": "fTokenName",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "fTokenSymbol",
              "type": "string"
            },
            {
              "internalType": "address",
              "name": "stableDebtTokenImpl",
              "type": "address"
            },
            {
              "internalType": "string",
              "name": "stableDebtTokenName",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "stableDebtTokenSymbol",
              "type": "string"
            },
            {
              "internalType": "address",
              "name": "variableDebtTokenImpl",
              "type": "address"
            },
            {
              "internalType": "string",
              "name": "variableDebtTokenName",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "variableDebtTokenSymbol",
              "type": "string"
            },
            {
              "internalType": "address",
              "name": "interestRateStrategy",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "baseLTV",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "treasury",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "creator",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "creatorPercentage",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "auctionCallerPercentage",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "auctionCreatorPercentage",
              "type": "uint256"
            },
            {
              "internalType": "string",
              "name": "assetPriceFeed",
              "type": "string"
            }
          ],
          "internalType": "struct ConfigTypes.InitReserveInput",
          "name": "input",
          "type": "tuple"
        },
        {
          "internalType": "address",
          "name": "fToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "stableDebtToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "variableDebtToken",
          "type": "address"
        }
      ],
      "name": "initReserve",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "addressProvider",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC1155BatchReceived",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC1155Received",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC721Received",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "borrowId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "duration",
          "type": "uint256"
        }
      ],
      "name": "refinance",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "borrowId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "repay",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "val",
          "type": "uint256"
        }
      ],
      "name": "setMaxNumberOfReserves",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "val",
          "type": "bool"
        }
      ],
      "name": "setPause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "startTime",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "durationTime",
          "type": "uint256"
        }
      ],
      "name": "setPausedTime",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "configuration",
          "type": "uint256"
        }
      ],
      "name": "setReserveConfiguration",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "creator",
          "type": "address"
        }
      ],
      "name": "setReserveCreatorAddress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "percentage",
          "type": "uint256"
        }
      ],
      "name": "setReserveCreatorPercentage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "rateAddress",
          "type": "address"
        }
      ],
      "name": "setReserveInterestRateAddress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "maxTokenSupply",
          "type": "uint256"
        }
      ],
      "name": "setReserveMaxSupply",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "_interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "withdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x60806040526072805464ffffffffff19166201518017905534801561002357600080fd5b50613bcc806100336000396000f3fe608060405234801561001057600080fd5b506004361061028a5760003560e01c80638fc421881161015c578063c28cadf7116100ce578063dcc5cded11610087578063dcc5cded14610688578063e49c8a521461069b578063eadff055146106ae578063f23a6e61146106f4578063f8c6893414610713578063ff7039c71461072457600080fd5b8063c28cadf7146105f9578063c46a90f51461060c578063c4d66de81461063a578063d1946dbc1461064d578063d6ee0f7314610662578063d8aed1451461067557600080fd5b80639e97a156116101205780639e97a15614610565578063a58497a514610578578063a7ff3b23146105ad578063bbce5cf3146105c0578063bc197c81146105d3578063bedb86fb146105e657600080fd5b80638fc42188146104765780639034c18c14610492578063986c9b20146104a5578063993ff816146104d05780639c74daf81461055257600080fd5b806331e884bb116102005780635c975abb116101b95780635c975abb146103f8578063621759de1461040a5780636c130dc71461041d578063746c35a21461043057806377778db31461044357806389a7245d1461046357600080fd5b806331e884bb1461038f57806334e69b62146103a45780633b4ecdb2146103b757806345a64925146103bf5780634b33a967146103d257806352120e23146103e557600080fd5b8063150b7a0211610252578063150b7a021461030457806319322775146103305780631de8a7c2146103435780632684dd09146103565780632e4e8eb4146103695780632f923ff71461037c57600080fd5b806301ffc9a71461028f578063044df1f2146102b757806308ac08b9146102cc5780630ad58d2f146102de578063118cfad3146102f1575b600080fd5b6102a261029d366004612a79565b610737565b60405190151581526020015b60405180910390f35b6102ca6102c5366004612aa3565b610789565b005b606e545b6040519081526020016102ae565b6102ca6102ec366004612af4565b61088b565b6102ca6102ff366004612b2d565b610936565b610317610312366004612c00565b610a28565b6040516001600160e01b031990911681526020016102ae565b6102ca61033e366004612b2d565b610a39565b6102ca610351366004612c7e565b610b21565b6102ca610364366004612d12565b610c3d565b6102d0610377366004612b2d565b610de4565b6102ca61038a366004612dd6565b610e03565b610397610ef9565b6040516102ae9190612df8565b6102ca6103b2366004612e45565b610f5b565b61039761104e565b6102d06103cd366004612eb1565b6110ae565b6102ca6103e0366004612d12565b61115e565b6102d06103f3366004612f2c565b6112c1565b607254600160281b900460ff166102a2565b6102ca610418366004612f72565b61130c565b6102ca61042b36600461300c565b611479565b6102ca61043e366004613068565b6114f2565b610456610451366004613068565b6115a5565b6040516102ae91906130c7565b6102ca610471366004612dd6565b6117c6565b6073546074545b604080519283526020830191909152016102ae565b6102d06104a0366004613068565b611886565b6065546104b8906001600160a01b031681565b6040516001600160a01b0390911681526020016102ae565b6105286104de366004613068565b600090815260676020526040902054670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000909116151590565b604080519415158552921515602085015290151591830191909152151560608201526080016102ae565b6102ca61056036600461323a565b61189d565b6102ca610573366004612f72565b6119e6565b61047d610586366004613068565b6000908152606760209081526040909120549081901c61ffff9081169260609290921c1690565b6102ca6105bb36600461329f565b611afa565b6102ca6105ce366004612b2d565b611bd9565b6103176105e13660046132de565b611cf3565b6102ca6105f43660046133ca565b611d26565b6102ca6106073660046133ec565b611e82565b61061f61061a366004613068565b612046565b604080519384526020840192909252908201526060016102ae565b6102ca6106483660046134dc565b6120e8565b61065561220b565b6040516102ae91906134f9565b6102ca610670366004612dd6565b6122a8565b6102ca610683366004612dd6565b61236b565b6102d0610696366004613068565b612420565b6102ca6106a9366004612dd6565b612437565b6106e56106bc366004613068565b604080516020808201835260009182905292815260678352819020815192830190915254815290565b604051905181526020016102ae565b610317610702366004613531565b63f23a6e6160e01b95945050505050565b6066546001600160a01b03166104b8565b6102ca610732366004612e45565b612526565b60006001600160e01b03198216630271189760e51b148061076857506001600160e01b03198216630a85bd0160e11b145b8061078357506001600160e01b031982166301ffc9a760e01b145b92915050565b610791612619565b610799612672565b73__$d722caef77098c4278f7cc499b02a86af3$__63fd21acf2606660009054906101000a90046001600160a01b0316606760405180608001604052806107de6126b8565b6001600160a01b03908116825260208083018b905260408084018b905260609384018a905280516001600160e01b031960e08a901b16815296831660048801526024870195909552835190911660448601528201516064850152918101516084840152015160a482015260c4015b60006040518083038186803b15801561086457600080fd5b505af4158015610878573d6000803e3d6000fd5b505050506108866001603355565b505050565b610893612619565b61089b612672565b73__$13008df657cf2235b72b6cac615c594ac6$__63b023f193606760405180608001604052806108ca6126b8565b6001600160a01b03908116825260208083018a905260408084018a905288831660609485015280516001600160e01b031960e089901b1681526004810196909652845183166024870152908401516044860152830151606485015291015116608482015260a40161084c565b61093e612619565b610946612672565b73__$fdc5093381d4a0b296ee33d1f23655684f$__63daa24772606660009054906101000a90046001600160a01b03166067604051806060016040528061098b6126b8565b6001600160a01b03908116825260208083018a905288821660409384015282516001600160e01b031960e089901b16815295821660048701526024860194909452825181166044860152928201516064850152015116608482015260a4015b60006040518083038186803b158015610a0257600080fd5b505af4158015610a16573d6000803e3d6000fd5b50505050610a246001603355565b5050565b630a85bd0160e11b5b949350505050565b610a416126b8565b6001600160a01b0316606660009054906101000a90046001600160a01b03166001600160a01b0316639b7ae5ec6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac191906135a7565b6001600160a01b031614610af05760405162461bcd60e51b8152600401610ae7906135c4565b60405180910390fd5b60009182526067602052604090912060060180546001600160a01b0319166001600160a01b03909216919091179055565b610b29612619565b610b31612672565b73__$13008df657cf2235b72b6cac615c594ac6$__636f2b2d2b606660009054906101000a90046001600160a01b031660676040518060a00160405280610b766126b8565b6001600160a01b03908116825260208083018c905260408084018c90528a831660608086019190915261ffff808c1660809687015282516001600160e01b031960e08c901b16815298851660048a0152602489019790975285518416604489015291850151606488015284015160848701528301511660a485015201511660c482015260e4015b60006040518083038186803b158015610c1557600080fd5b505af4158015610c29573d6000803e3d6000fd5b50505050610c376001603355565b50505050565b610c45612619565b610c4d612672565b73__$fdc5093381d4a0b296ee33d1f23655684f$__63bdfbf9c6606660009054906101000a90046001600160a01b031660676040518060a00160405280610c926126b8565b6001600160a01b031681526020018d8d808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208d810282810182019093528d82529283019290918e918e9182918501908490808284376000920191909152505050908252506040805160208b810282810182019093528b82529283019290918c918c91829185019084908082843760009201919091525050509082525060408051602089810282810182019093528982529283019290918a918a91829185019084908082843760009201919091525050509152506040516001600160e01b031960e086901b168152610da093929190600401613654565b60006040518083038186803b158015610db857600080fd5b505af4158015610dcc573d6000803e3d6000fd5b50505050610dda6001603355565b5050505050505050565b6000828152606760205260408120610dfc90836126da565b9392505050565b610e0b6126b8565b6001600160a01b0316606660009054906101000a90046001600160a01b03166001600160a01b0316639b7ae5ec6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8b91906135a7565b6001600160a01b031614610eb15760405162461bcd60e51b8152600401610ae7906135c4565b6073829055607481905560408051838152602081018390527fd897a722b1c0a957941f99a13c0ea24d7d4ffafe0953658f68f49e13ccba5c5a91015b60405180910390a15050565b6060606a805480602002602001604051908101604052809291908181526020018280548015610f5157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f33575b5050505050905090565b610f63612619565b610f6b612672565b73__$fdc5093381d4a0b296ee33d1f23655684f$__63d59e5a1a606660009054906101000a90046001600160a01b031660676040518060600160405280610fb06126b8565b6001600160a01b0316815260200189898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050509082525060408051602089810282810182019093528982529283019290918a918a91829185019084908082843760009201919091525050509152506040516001600160e01b031960e086901b168152610bfd939291906004016136f7565b6060606c805480602002602001604051908101604052809291908181526020018280548015610f51576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f33575050505050905090565b60006110b86126b8565b6001600160a01b0316606660009054906101000a90046001600160a01b03166001600160a01b0316639b7ae5ec6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611114573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113891906135a7565b6001600160a01b031614610a315760405162461bcd60e51b8152600401610ae7906135c4565b611166612619565b61116e612672565b73__$13008df657cf2235b72b6cac615c594ac6$__63488b0171606660009054906101000a90046001600160a01b031660676040518060a001604052806111b36126b8565b6001600160a01b031681526020018d8d808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208d810282810182019093528d82529283019290918e918e9182918501908490808284376000920191909152505050908252506040805160208b810282810182019093528b82529283019290918c918c91829185019084908082843760009201919091525050509082525060408051602089810282810182019093528982529283019290918a918a91829185019084908082843760009201919091525050509152506040516001600160e01b031960e086901b168152610da093929190600401613752565b6001600160a01b0380851660009081526068602090815260408083209387168352929052908120816112f38486613836565b8152602001908152602001600020549050949350505050565b611314612619565b61131c612672565b73__$d722caef77098c4278f7cc499b02a86af3$__6391188af6606660009054906101000a90046001600160a01b0316606760405180608001604052806113616126b8565b6001600160a01b031681526020018b8b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208b810282810182019093528b82529283019290918c918c91829185019084908082843760009201919091525050509082525060408051602089810282810182019093528982529283019290918a918a91829185019084908082843760009201919091525050509152506040516001600160e01b031960e086901b16815261143793929190600401613849565b60006040518083038186803b15801561144f57600080fd5b505af4158015611463573d6000803e3d6000fd5b505050506114716001603355565b505050505050565b611481612672565b600086815260676020526040902060038101546001600160a01b03166114a56126b8565b6001600160a01b0316146040518060400160405280600381526020016203431360ec1b81525090610dda5760405162461bcd60e51b8152600401610ae791906138c2565b50505050505050565b6114fa6126b8565b6001600160a01b0316606660009054906101000a90046001600160a01b03166001600160a01b0316639b7ae5ec6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611556573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157a91906135a7565b6001600160a01b0316146115a05760405162461bcd60e51b8152600401610ae7906135c4565b606e55565b60408051610240810182526000610220820181815282526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820152610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e0810182905261020081019190915260008281526067602090815260409182902082516102408101845281546102208201908152815260018201546001600160a01b039081169382019390935260028201548316938101939093526003810154821660608401526004810154821660808401526005810154821660a0840152600681015490911660c083015260078101805460e0840191906116c6906138d5565b80601f01602080910402602001604051908101604052809291908181526020018280546116f2906138d5565b801561173f5780601f106117145761010080835404028352916020019161173f565b820191906000526020600020905b81548152906001019060200180831161172257829003601f168201915b50505091835250506008820154602082015260098201546040820152600a8201546060820152600b8201546080820152600c8201546001600160801b0380821660a0840152600160801b91829004811660c0840152600d84015480821660e08501529190910416610100820152600e9091015464ffffffffff166101209091015292915050565b6117ce6126b8565b6001600160a01b0316606660009054906101000a90046001600160a01b03166001600160a01b0316639b7ae5ec6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561182a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184e91906135a7565b6001600160a01b0316146118745760405162461bcd60e51b8152600401610ae7906135c4565b60009182526067602052604090912055565b600081815260676020526040812061078390612750565b6118a5612619565b6118ad612672565b73__$d722caef77098c4278f7cc499b02a86af3$__636f672fbf606660009054906101000a90046001600160a01b031660676040518061010001604052806118f36126b8565b6001600160a01b03908116825260208083018f905260408084018f905260608085018f905260808086018f905260a08087018f90528d861660c08089019190915261ffff808f1660e0998a015285516001600160e01b03198e8b1b1681529b881660048d015260248c019a909a528851871660448c01529488015160648b01529287015160848a01529086015160a489015285015160c488015284015160e4870152830151166101048501520151166101248201526101440160006040518083038186803b1580156119c457600080fd5b505af41580156119d8573d6000803e3d6000fd5b505050506114e96001603355565b6119ee612619565b6119f6612672565b73__$13008df657cf2235b72b6cac615c594ac6$__63a3b4d80960676040518060800160405280611a256126b8565b6001600160a01b031681526020018a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208a810282810182019093528a82529283019290918b918b918291850190849080828437600092019190915250505090825250604080516020888102828101820190935288825292830192909189918991829185019084908082843760009201919091525050509152506040516001600160e01b031960e085901b16815261143792919060040161390f565b611b02612619565b611b0a612672565b73__$fdc5093381d4a0b296ee33d1f23655684f$__63e7206e08606660009054906101000a90046001600160a01b031660676040518060a00160405280611b4f6126b8565b6001600160a01b0390811682528a811660208084019190915260408084018c905260608085018c90528a841660809586015281516001600160e01b031960e08b901b16815297841660048901526024880196909652845183166044880152908401518216606487015283015160848601529282015160a485015201511660c482015260e401610bfd565b611be16126b8565b6001600160a01b0316606660009054906101000a90046001600160a01b03166001600160a01b0316639b7ae5ec6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6191906135a7565b6001600160a01b031614611c875760405162461bcd60e51b8152600401610ae7906135c4565b6000828152606760205260409081902060030154905163bc1d19dd60e01b81526001600160a01b0383811660048301529091169063bc1d19dd906024015b600060405180830381600087803b158015611cdf57600080fd5b505af1158015611471573d6000803e3d6000fd5b604080518082018252600381526206a60760eb1b6020820152905162461bcd60e51b8152600091610ae7916004016138c2565b611d2e6126b8565b6001600160a01b0316606660009054906101000a90046001600160a01b03166001600160a01b0316639b7ae5ec6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dae91906135a7565b6001600160a01b031614611dd45760405162461bcd60e51b8152600401610ae7906135c4565b60725460ff600160281b90910416151581151514611e7f576072805465ff00000000001916600160281b8315158102919091179182905560ff91041615611e4557426073556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a150565b607354611e529042613989565b6074556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a15b50565b611e8a612619565b611e92612672565b6000604051806101000160405280611ea86126b8565b6001600160a01b031681526020018d8d808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208d810282810182019093528d82529283019290918e918e9182918501908490808284376000920191909152505050908252506040805160208b810282810182019093528b82529283019290918c918c91829185019084908082843760009201919091525050509082525060408051602089810282810182019093528982529283019290918a918a918291850190849080828437600092019190915250505090825250602081018690526001600160a01b0380861660408084019190915261ffff8616606090930192909252606654915163c09d4f2760e01b815292935073__$d722caef77098c4278f7cc499b02a86af3$__9263c09d4f2792611ffe921690606790869060040161399c565b60006040518083038186803b15801561201657600080fd5b505af415801561202a573d6000803e3d6000fd5b50505050506120396001603355565b5050505050505050505050565b606654604051631285c83d60e01b81526001600160a01b03909116600482015260676024820152604481018290526000908190819073__$fdc5093381d4a0b296ee33d1f23655684f$__90631285c83d90606401606060405180830381865af41580156120b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120db9190613a84565b9250925092509193909250565b600054610100900460ff16158080156121085750600054600160ff909116105b806121225750303b158015612122575060005460ff166001145b6121855760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610ae7565b6000805460ff1916600117905580156121a8576000805461ff0019166101001790555b610100606e55606680546001600160a01b0319166001600160a01b0384161790558015610a24576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001610eed565b6060606d5467ffffffffffffffff81111561222857612228612b5d565b604051908082528060200260200182016040528015612251578160200160208202803683370190505b50905060005b606d548110156122a457600081815260676020526040902060080154825183908390811061228757612287613ab2565b60209081029190910101528061229c81613ac8565b915050612257565b5090565b6122b06126b8565b6001600160a01b0316606660009054906101000a90046001600160a01b03166001600160a01b0316639b7ae5ec6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561230c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233091906135a7565b6001600160a01b0316146123565760405162461bcd60e51b8152600401610ae7906135c4565b60009182526067602052604090912060090155565b612373612619565b61237b612672565b73__$d722caef77098c4278f7cc499b02a86af3$__63a1aebc73606660009054906101000a90046001600160a01b0316606760405180606001604052806123c06126b8565b6001600160a01b03908116825260208083018a9052604092830189905282516001600160e01b031960e089901b1681529582166004870152602486019490945282511660448501529181015160648401520151608482015260a4016109ea565b6000818152606760205260408120610783906127ba565b61243f6126b8565b6001600160a01b0316606660009054906101000a90046001600160a01b03166001600160a01b0316639b7ae5ec6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561249b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124bf91906135a7565b6001600160a01b0316146124e55760405162461bcd60e51b8152600401610ae7906135c4565b60008281526067602052604090819020600301549051632b2b063960e21b8152600481018390526001600160a01b039091169063acac18e490602401611cc5565b61252e612619565b612536612672565b73__$d722caef77098c4278f7cc499b02a86af3$__63b45bd138606660009054906101000a90046001600160a01b03166067604051806060016040528061257b6126b8565b6001600160a01b0316815260200189898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050509082525060408051602089810282810182019093528982529283019290918a918a91829185019084908082843760009201919091525050509152506040516001600160e01b031960e086901b168152610bfd93929190600401613ae1565b60026033540361266b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610ae7565b6002603355565b60725460408051808201909152600381526234303160e81b602082015290600160281b900460ff1615611e7f5760405162461bcd60e51b8152600401610ae791906138c2565b60006126c33361280e565b156126d5575060131936013560601c90565b503390565b60048281015460405163e78c9b3b60e01b81526001600160a01b03848116938201939093526000929091169063e78c9b3b90602401602060405180830381865afa15801561272c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfc9190613b3c565b600e81015460009064ffffffffff9081169042168103612783575050600c0154600160801b90046001600160801b031690565b600c830154600d840154600091610a31916001600160801b03600160801b928390048116926127b492041685612897565b906128a4565b600e81015460009064ffffffffff90811690421681036127e6575050600c01546001600160801b031690565b600c830154600d840154600091610a31916001600160801b03918216916127b49116856128e6565b6066546040805163862beee160e01b815290516000926001600160a01b03169163862beee19160048083019260209291908290030181865afa158015612858573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061287c91906135a7565b6001600160a01b0316826001600160a01b0316149050919050565b6000610dfc83834261292c565b6000610dfc6b033b2e3c9fd0803ce80000006128e06128c38686612a55565b6128da60026b033b2e3c9fd0803ce8000000613b55565b90612a61565b90612a6d565b6000806128fa64ffffffffff841642613989565b90506b033b2e3c9fd0803ce80000006301e133806129188387613b77565b6129229190613b55565b610a319190613836565b60008061294064ffffffffff851684613989565b90508060000361295f576b033b2e3c9fd0803ce8000000915050610dfc565b600061296c600183613989565b905060006002831161297f57600061298a565b61298a600284613989565b9050600061299c6301e1338089613b55565b905060006129aa82806128a4565b905060006129b882846128a4565b905060006002836129c9888a613b77565b6129d39190613b77565b6129dd9190613b55565b90506000600683876129ef8a8c613b77565b6129f99190613b77565b612a039190613b77565b612a0d9190613b55565b90508082612a1b8a88613b77565b612a31906b033b2e3c9fd0803ce8000000613836565b612a3b9190613836565b612a459190613836565b9c9b505050505050505050505050565b6000610dfc8284613b77565b6000610dfc8284613836565b6000610dfc8284613b55565b600060208284031215612a8b57600080fd5b81356001600160e01b031981168114610dfc57600080fd5b600080600060608486031215612ab857600080fd5b505081359360208301359350604090920135919050565b6001600160a01b0381168114611e7f57600080fd5b8035612aef81612acf565b919050565b600080600060608486031215612b0957600080fd5b83359250602084013591506040840135612b2281612acf565b809150509250925092565b60008060408385031215612b4057600080fd5b823591506020830135612b5281612acf565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612b8457600080fd5b813567ffffffffffffffff80821115612b9f57612b9f612b5d565b604051601f8301601f19908116603f01168101908282118183101715612bc757612bc7612b5d565b81604052838152866020858801011115612be057600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060008060808587031215612c1657600080fd5b8435612c2181612acf565b93506020850135612c3181612acf565b925060408501359150606085013567ffffffffffffffff811115612c5457600080fd5b612c6087828801612b73565b91505092959194509250565b803561ffff81168114612aef57600080fd5b60008060008060808587031215612c9457600080fd5b84359350602085013592506040850135612cad81612acf565b9150612cbb60608601612c6c565b905092959194509250565b60008083601f840112612cd857600080fd5b50813567ffffffffffffffff811115612cf057600080fd5b6020830191508360208260051b8501011115612d0b57600080fd5b9250929050565b6000806000806000806000806080898b031215612d2e57600080fd5b883567ffffffffffffffff80821115612d4657600080fd5b612d528c838d01612cc6565b909a50985060208b0135915080821115612d6b57600080fd5b612d778c838d01612cc6565b909850965060408b0135915080821115612d9057600080fd5b612d9c8c838d01612cc6565b909650945060608b0135915080821115612db557600080fd5b50612dc28b828c01612cc6565b999c989b5096995094979396929594505050565b60008060408385031215612de957600080fd5b50508035926020909101359150565b6020808252825182820181905260009190848201906040850190845b81811015612e395783516001600160a01b031683529284019291840191600101612e14565b50909695505050505050565b60008060008060408587031215612e5b57600080fd5b843567ffffffffffffffff80821115612e7357600080fd5b612e7f88838901612cc6565b90965094506020870135915080821115612e9857600080fd5b50612ea587828801612cc6565b95989497509550505050565b60008060008060808587031215612ec757600080fd5b843567ffffffffffffffff811115612ede57600080fd5b85016103408188031215612ef157600080fd5b93506020850135612f0181612acf565b92506040850135612f1181612acf565b91506060850135612f2181612acf565b939692955090935050565b60008060008060808587031215612f4257600080fd5b8435612f4d81612acf565b93506020850135612f5d81612acf565b93969395505050506040820135916060013590565b60008060008060008060608789031215612f8b57600080fd5b863567ffffffffffffffff80821115612fa357600080fd5b612faf8a838b01612cc6565b90985096506020890135915080821115612fc857600080fd5b612fd48a838b01612cc6565b90965094506040890135915080821115612fed57600080fd5b50612ffa89828a01612cc6565b979a9699509497509295939492505050565b60008060008060008060c0878903121561302557600080fd5b86359550602087013561303781612acf565b9450604087013561304781612acf565b959894975094956060810135955060808101359460a0909101359350915050565b60006020828403121561307a57600080fd5b5035919050565b6000815180845260005b818110156130a75760208185018101518683018201520161308b565b506000602082860101526020601f19601f83011685010191505092915050565b602081526130d9602082018351519052565b600060208301516130f560408401826001600160a01b03169052565b5060408301516001600160a01b03811660608401525060608301516001600160a01b03811660808401525060808301516001600160a01b03811660a08401525060a08301516001600160a01b03811660c08401525060c08301516001600160a01b03811660e08401525060e0830151610220610100818186015261317d610240860184613081565b90860151610120868101919091528601516101408087019190915286015161016080870191909152860151610180808701919091528601519092506101a06131cf818701836001600160801b03169052565b86015190506101c06131eb868201836001600160801b03169052565b86015190506101e0613207868201836001600160801b03169052565b8601519050610200613223868201836001600160801b03169052565b9095015164ffffffffff1693019290925250919050565b600080600080600080600060e0888a03121561325557600080fd5b873596506020880135955060408801359450606088013593506080880135925060a088013561328381612acf565b915061329160c08901612c6c565b905092959891949750929550565b600080600080608085870312156132b557600080fd5b84356132c081612acf565b935060208501359250604085013591506060850135612f2181612acf565b60008060008060008060008060a0898b0312156132fa57600080fd5b883561330581612acf565b9750602089013561331581612acf565b9650604089013567ffffffffffffffff8082111561333257600080fd5b61333e8c838d01612cc6565b909850965060608b013591508082111561335757600080fd5b6133638c838d01612cc6565b909650945060808b013591508082111561337c57600080fd5b818b0191508b601f83011261339057600080fd5b81358181111561339f57600080fd5b8c60208285010111156133b157600080fd5b6020830194508093505050509295985092959890939650565b6000602082840312156133dc57600080fd5b81358015158114610dfc57600080fd5b600080600080600080600080600080600060e08c8e03121561340d57600080fd5b67ffffffffffffffff808d35111561342457600080fd5b6134318e8e358f01612cc6565b909c509a5060208d013581101561344757600080fd5b6134578e60208f01358f01612cc6565b909a50985060408d013581101561346d57600080fd5b61347d8e60408f01358f01612cc6565b909850965060608d013581101561349357600080fd5b506134a48d60608e01358e01612cc6565b909550935060808c013592506134bc60a08d01612ae4565b91506134ca60c08d01612c6c565b90509295989b509295989b9093969950565b6000602082840312156134ee57600080fd5b8135610dfc81612acf565b6020808252825182820181905260009190848201906040850190845b81811015612e3957835183529284019291840191600101613515565b600080600080600060a0868803121561354957600080fd5b853561355481612acf565b9450602086013561356481612acf565b93506040860135925060608601359150608086013567ffffffffffffffff81111561358e57600080fd5b61359a88828901612b73565b9150509295509295909350565b6000602082840312156135b957600080fd5b8151610dfc81612acf565b602080825260029082015261433160f01b604082015260600190565b600081518084526020808501945080840160005b838110156136195781516001600160a01b0316875295820195908201906001016135f4565b509495945050505050565b600081518084526020808501945080840160005b8381101561361957815187529582019590820190600101613638565b600060018060a01b0380861683528460208401526060604084015280845116606084015250602083015160a060808401526136936101008401826135e0565b90506040840151605f19808584030160a08601526136b18383613624565b925060608601519150808584030160c08601526136ce8383613624565b925060808601519150808584030160e0860152506136ec82826135e0565b979650505050505050565b600060018060a01b038086168352846020840152606060408401528084511660608401525060208301516060608084015261373560c0840182613624565b90506040840151605f198483030160a08501526136ec82826135e0565b600060018060a01b038086168352602085818501526060604085015281855116606085015280850151915060a06080850152613792610100850183613624565b91506040850151605f19808685030160a08701526137b08483613624565b935060608701519150808685030160c08701526137cd84836135e0565b608088015187820390920160e088015281518082529184019450600092508301905b8083101561381357845161ffff1682529383019360019290920191908301906137ef565b5098975050505050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561078357610783613820565b600060018060a01b0380861683528460208401526060604084015280845116606084015250602083015160808084015261388660e0840182613624565b90506040840151605f19808584030160a08601526138a48383613624565b925060608601519150808584030160c0860152506136ec8282613624565b602081526000610dfc6020830184613081565b600181811c908216806138e957607f821691505b60208210810361390957634e487b7160e01b600052602260045260246000fd5b50919050565b8281526040602082015260018060a01b038251166040820152600060208301516080606084015261394360c0840182613624565b90506040840151603f19808584030160808601526139618383613624565b925060608601519150808584030160a08601525061397f82826135e0565b9695505050505050565b8181038181111561078357610783613820565b60018060a01b0384168152826020820152606060408201526139ca6060820183516001600160a01b03169052565b600060208301516101008060808501526139e8610160850183613624565b91506040850151605f19808685030160a0870152613a068483613624565b935060608701519150808685030160c0870152613a238483613624565b935060808701519150808685030160e087015250613a418382613624565b92505060a0850151818501525060c0840151613a696101208501826001600160a01b03169052565b5060e084015161ffff81166101408501525095945050505050565b600080600060608486031215613a9957600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052603260045260246000fd5b600060018201613ada57613ada613820565b5060010190565b600060018060a01b0380861683528460208401526060604084015280845116606084015250602083015160606080840152613b1f60c0840182613624565b90506040840151605f198483030160a08501526136ec8282613624565b600060208284031215613b4e57600080fd5b5051919050565b600082613b7257634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613b9157613b91613820565b50029056fea2646970667358221220bf13109ac32312ef7f4fc820ff900c72df32d18516e9ca51cf41a0abd6107a1164736f6c63430008100033",
    "sourceMap": "2499:24490:143:-:0;;;1681:43:144;;;-1:-1:-1;;1681:43:144;1716:8;1681:43;;;2499:24490:143;;;;;;;;;;;;;;;;",
    "linkReferences": {
      "src/protocol/libraries/logic/BorrowLogic.sol": {
        "BorrowLogic": [
          {
            "start": 1998,
            "length": 20
          },
          {
            "start": 4945,
            "length": 20
          },
          {
            "start": 6370,
            "length": 20
          },
          {
            "start": 8196,
            "length": 20
          },
          {
            "start": 9136,
            "length": 20
          },
          {
            "start": 9579,
            "length": 20
          }
        ]
      },
      "src/protocol/libraries/logic/LiquidateLogic.sol": {
        "LiquidateLogic": [
          {
            "start": 2427,
            "length": 20
          },
          {
            "start": 3202,
            "length": 20
          },
          {
            "start": 4000,
            "length": 20
          },
          {
            "start": 6975,
            "length": 20
          },
          {
            "start": 8368,
            "length": 20
          }
        ]
      },
      "src/protocol/libraries/logic/SupplyLogic.sol": {
        "SupplyLogic": [
          {
            "start": 2256,
            "length": 20
          },
          {
            "start": 2918,
            "length": 20
          },
          {
            "start": 4515,
            "length": 20
          },
          {
            "start": 6699,
            "length": 20
          }
        ]
      }
    }
  },
  "deployedBytecode": {
    "object": "0x608060405234801561001057600080fd5b506004361061028a5760003560e01c80638fc421881161015c578063c28cadf7116100ce578063dcc5cded11610087578063dcc5cded14610688578063e49c8a521461069b578063eadff055146106ae578063f23a6e61146106f4578063f8c6893414610713578063ff7039c71461072457600080fd5b8063c28cadf7146105f9578063c46a90f51461060c578063c4d66de81461063a578063d1946dbc1461064d578063d6ee0f7314610662578063d8aed1451461067557600080fd5b80639e97a156116101205780639e97a15614610565578063a58497a514610578578063a7ff3b23146105ad578063bbce5cf3146105c0578063bc197c81146105d3578063bedb86fb146105e657600080fd5b80638fc42188146104765780639034c18c14610492578063986c9b20146104a5578063993ff816146104d05780639c74daf81461055257600080fd5b806331e884bb116102005780635c975abb116101b95780635c975abb146103f8578063621759de1461040a5780636c130dc71461041d578063746c35a21461043057806377778db31461044357806389a7245d1461046357600080fd5b806331e884bb1461038f57806334e69b62146103a45780633b4ecdb2146103b757806345a64925146103bf5780634b33a967146103d257806352120e23146103e557600080fd5b8063150b7a0211610252578063150b7a021461030457806319322775146103305780631de8a7c2146103435780632684dd09146103565780632e4e8eb4146103695780632f923ff71461037c57600080fd5b806301ffc9a71461028f578063044df1f2146102b757806308ac08b9146102cc5780630ad58d2f146102de578063118cfad3146102f1575b600080fd5b6102a261029d366004612a79565b610737565b60405190151581526020015b60405180910390f35b6102ca6102c5366004612aa3565b610789565b005b606e545b6040519081526020016102ae565b6102ca6102ec366004612af4565b61088b565b6102ca6102ff366004612b2d565b610936565b610317610312366004612c00565b610a28565b6040516001600160e01b031990911681526020016102ae565b6102ca61033e366004612b2d565b610a39565b6102ca610351366004612c7e565b610b21565b6102ca610364366004612d12565b610c3d565b6102d0610377366004612b2d565b610de4565b6102ca61038a366004612dd6565b610e03565b610397610ef9565b6040516102ae9190612df8565b6102ca6103b2366004612e45565b610f5b565b61039761104e565b6102d06103cd366004612eb1565b6110ae565b6102ca6103e0366004612d12565b61115e565b6102d06103f3366004612f2c565b6112c1565b607254600160281b900460ff166102a2565b6102ca610418366004612f72565b61130c565b6102ca61042b36600461300c565b611479565b6102ca61043e366004613068565b6114f2565b610456610451366004613068565b6115a5565b6040516102ae91906130c7565b6102ca610471366004612dd6565b6117c6565b6073546074545b604080519283526020830191909152016102ae565b6102d06104a0366004613068565b611886565b6065546104b8906001600160a01b031681565b6040516001600160a01b0390911681526020016102ae565b6105286104de366004613068565b600090815260676020526040902054670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000909116151590565b604080519415158552921515602085015290151591830191909152151560608201526080016102ae565b6102ca61056036600461323a565b61189d565b6102ca610573366004612f72565b6119e6565b61047d610586366004613068565b6000908152606760209081526040909120549081901c61ffff9081169260609290921c1690565b6102ca6105bb36600461329f565b611afa565b6102ca6105ce366004612b2d565b611bd9565b6103176105e13660046132de565b611cf3565b6102ca6105f43660046133ca565b611d26565b6102ca6106073660046133ec565b611e82565b61061f61061a366004613068565b612046565b604080519384526020840192909252908201526060016102ae565b6102ca6106483660046134dc565b6120e8565b61065561220b565b6040516102ae91906134f9565b6102ca610670366004612dd6565b6122a8565b6102ca610683366004612dd6565b61236b565b6102d0610696366004613068565b612420565b6102ca6106a9366004612dd6565b612437565b6106e56106bc366004613068565b604080516020808201835260009182905292815260678352819020815192830190915254815290565b604051905181526020016102ae565b610317610702366004613531565b63f23a6e6160e01b95945050505050565b6066546001600160a01b03166104b8565b6102ca610732366004612e45565b612526565b60006001600160e01b03198216630271189760e51b148061076857506001600160e01b03198216630a85bd0160e11b145b8061078357506001600160e01b031982166301ffc9a760e01b145b92915050565b610791612619565b610799612672565b73__$d722caef77098c4278f7cc499b02a86af3$__63fd21acf2606660009054906101000a90046001600160a01b0316606760405180608001604052806107de6126b8565b6001600160a01b03908116825260208083018b905260408084018b905260609384018a905280516001600160e01b031960e08a901b16815296831660048801526024870195909552835190911660448601528201516064850152918101516084840152015160a482015260c4015b60006040518083038186803b15801561086457600080fd5b505af4158015610878573d6000803e3d6000fd5b505050506108866001603355565b505050565b610893612619565b61089b612672565b73__$13008df657cf2235b72b6cac615c594ac6$__63b023f193606760405180608001604052806108ca6126b8565b6001600160a01b03908116825260208083018a905260408084018a905288831660609485015280516001600160e01b031960e089901b1681526004810196909652845183166024870152908401516044860152830151606485015291015116608482015260a40161084c565b61093e612619565b610946612672565b73__$fdc5093381d4a0b296ee33d1f23655684f$__63daa24772606660009054906101000a90046001600160a01b03166067604051806060016040528061098b6126b8565b6001600160a01b03908116825260208083018a905288821660409384015282516001600160e01b031960e089901b16815295821660048701526024860194909452825181166044860152928201516064850152015116608482015260a4015b60006040518083038186803b158015610a0257600080fd5b505af4158015610a16573d6000803e3d6000fd5b50505050610a246001603355565b5050565b630a85bd0160e11b5b949350505050565b610a416126b8565b6001600160a01b0316606660009054906101000a90046001600160a01b03166001600160a01b0316639b7ae5ec6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac191906135a7565b6001600160a01b031614610af05760405162461bcd60e51b8152600401610ae7906135c4565b60405180910390fd5b60009182526067602052604090912060060180546001600160a01b0319166001600160a01b03909216919091179055565b610b29612619565b610b31612672565b73__$13008df657cf2235b72b6cac615c594ac6$__636f2b2d2b606660009054906101000a90046001600160a01b031660676040518060a00160405280610b766126b8565b6001600160a01b03908116825260208083018c905260408084018c90528a831660608086019190915261ffff808c1660809687015282516001600160e01b031960e08c901b16815298851660048a0152602489019790975285518416604489015291850151606488015284015160848701528301511660a485015201511660c482015260e4015b60006040518083038186803b158015610c1557600080fd5b505af4158015610c29573d6000803e3d6000fd5b50505050610c376001603355565b50505050565b610c45612619565b610c4d612672565b73__$fdc5093381d4a0b296ee33d1f23655684f$__63bdfbf9c6606660009054906101000a90046001600160a01b031660676040518060a00160405280610c926126b8565b6001600160a01b031681526020018d8d808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208d810282810182019093528d82529283019290918e918e9182918501908490808284376000920191909152505050908252506040805160208b810282810182019093528b82529283019290918c918c91829185019084908082843760009201919091525050509082525060408051602089810282810182019093528982529283019290918a918a91829185019084908082843760009201919091525050509152506040516001600160e01b031960e086901b168152610da093929190600401613654565b60006040518083038186803b158015610db857600080fd5b505af4158015610dcc573d6000803e3d6000fd5b50505050610dda6001603355565b5050505050505050565b6000828152606760205260408120610dfc90836126da565b9392505050565b610e0b6126b8565b6001600160a01b0316606660009054906101000a90046001600160a01b03166001600160a01b0316639b7ae5ec6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8b91906135a7565b6001600160a01b031614610eb15760405162461bcd60e51b8152600401610ae7906135c4565b6073829055607481905560408051838152602081018390527fd897a722b1c0a957941f99a13c0ea24d7d4ffafe0953658f68f49e13ccba5c5a91015b60405180910390a15050565b6060606a805480602002602001604051908101604052809291908181526020018280548015610f5157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f33575b5050505050905090565b610f63612619565b610f6b612672565b73__$fdc5093381d4a0b296ee33d1f23655684f$__63d59e5a1a606660009054906101000a90046001600160a01b031660676040518060600160405280610fb06126b8565b6001600160a01b0316815260200189898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050509082525060408051602089810282810182019093528982529283019290918a918a91829185019084908082843760009201919091525050509152506040516001600160e01b031960e086901b168152610bfd939291906004016136f7565b6060606c805480602002602001604051908101604052809291908181526020018280548015610f51576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f33575050505050905090565b60006110b86126b8565b6001600160a01b0316606660009054906101000a90046001600160a01b03166001600160a01b0316639b7ae5ec6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611114573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113891906135a7565b6001600160a01b031614610a315760405162461bcd60e51b8152600401610ae7906135c4565b611166612619565b61116e612672565b73__$13008df657cf2235b72b6cac615c594ac6$__63488b0171606660009054906101000a90046001600160a01b031660676040518060a001604052806111b36126b8565b6001600160a01b031681526020018d8d808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208d810282810182019093528d82529283019290918e918e9182918501908490808284376000920191909152505050908252506040805160208b810282810182019093528b82529283019290918c918c91829185019084908082843760009201919091525050509082525060408051602089810282810182019093528982529283019290918a918a91829185019084908082843760009201919091525050509152506040516001600160e01b031960e086901b168152610da093929190600401613752565b6001600160a01b0380851660009081526068602090815260408083209387168352929052908120816112f38486613836565b8152602001908152602001600020549050949350505050565b611314612619565b61131c612672565b73__$d722caef77098c4278f7cc499b02a86af3$__6391188af6606660009054906101000a90046001600160a01b0316606760405180608001604052806113616126b8565b6001600160a01b031681526020018b8b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208b810282810182019093528b82529283019290918c918c91829185019084908082843760009201919091525050509082525060408051602089810282810182019093528982529283019290918a918a91829185019084908082843760009201919091525050509152506040516001600160e01b031960e086901b16815261143793929190600401613849565b60006040518083038186803b15801561144f57600080fd5b505af4158015611463573d6000803e3d6000fd5b505050506114716001603355565b505050505050565b611481612672565b600086815260676020526040902060038101546001600160a01b03166114a56126b8565b6001600160a01b0316146040518060400160405280600381526020016203431360ec1b81525090610dda5760405162461bcd60e51b8152600401610ae791906138c2565b50505050505050565b6114fa6126b8565b6001600160a01b0316606660009054906101000a90046001600160a01b03166001600160a01b0316639b7ae5ec6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611556573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157a91906135a7565b6001600160a01b0316146115a05760405162461bcd60e51b8152600401610ae7906135c4565b606e55565b60408051610240810182526000610220820181815282526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820152610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e0810182905261020081019190915260008281526067602090815260409182902082516102408101845281546102208201908152815260018201546001600160a01b039081169382019390935260028201548316938101939093526003810154821660608401526004810154821660808401526005810154821660a0840152600681015490911660c083015260078101805460e0840191906116c6906138d5565b80601f01602080910402602001604051908101604052809291908181526020018280546116f2906138d5565b801561173f5780601f106117145761010080835404028352916020019161173f565b820191906000526020600020905b81548152906001019060200180831161172257829003601f168201915b50505091835250506008820154602082015260098201546040820152600a8201546060820152600b8201546080820152600c8201546001600160801b0380821660a0840152600160801b91829004811660c0840152600d84015480821660e08501529190910416610100820152600e9091015464ffffffffff166101209091015292915050565b6117ce6126b8565b6001600160a01b0316606660009054906101000a90046001600160a01b03166001600160a01b0316639b7ae5ec6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561182a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184e91906135a7565b6001600160a01b0316146118745760405162461bcd60e51b8152600401610ae7906135c4565b60009182526067602052604090912055565b600081815260676020526040812061078390612750565b6118a5612619565b6118ad612672565b73__$d722caef77098c4278f7cc499b02a86af3$__636f672fbf606660009054906101000a90046001600160a01b031660676040518061010001604052806118f36126b8565b6001600160a01b03908116825260208083018f905260408084018f905260608085018f905260808086018f905260a08087018f90528d861660c08089019190915261ffff808f1660e0998a015285516001600160e01b03198e8b1b1681529b881660048d015260248c019a909a528851871660448c01529488015160648b01529287015160848a01529086015160a489015285015160c488015284015160e4870152830151166101048501520151166101248201526101440160006040518083038186803b1580156119c457600080fd5b505af41580156119d8573d6000803e3d6000fd5b505050506114e96001603355565b6119ee612619565b6119f6612672565b73__$13008df657cf2235b72b6cac615c594ac6$__63a3b4d80960676040518060800160405280611a256126b8565b6001600160a01b031681526020018a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208a810282810182019093528a82529283019290918b918b918291850190849080828437600092019190915250505090825250604080516020888102828101820190935288825292830192909189918991829185019084908082843760009201919091525050509152506040516001600160e01b031960e085901b16815261143792919060040161390f565b611b02612619565b611b0a612672565b73__$fdc5093381d4a0b296ee33d1f23655684f$__63e7206e08606660009054906101000a90046001600160a01b031660676040518060a00160405280611b4f6126b8565b6001600160a01b0390811682528a811660208084019190915260408084018c905260608085018c90528a841660809586015281516001600160e01b031960e08b901b16815297841660048901526024880196909652845183166044880152908401518216606487015283015160848601529282015160a485015201511660c482015260e401610bfd565b611be16126b8565b6001600160a01b0316606660009054906101000a90046001600160a01b03166001600160a01b0316639b7ae5ec6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6191906135a7565b6001600160a01b031614611c875760405162461bcd60e51b8152600401610ae7906135c4565b6000828152606760205260409081902060030154905163bc1d19dd60e01b81526001600160a01b0383811660048301529091169063bc1d19dd906024015b600060405180830381600087803b158015611cdf57600080fd5b505af1158015611471573d6000803e3d6000fd5b604080518082018252600381526206a60760eb1b6020820152905162461bcd60e51b8152600091610ae7916004016138c2565b611d2e6126b8565b6001600160a01b0316606660009054906101000a90046001600160a01b03166001600160a01b0316639b7ae5ec6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dae91906135a7565b6001600160a01b031614611dd45760405162461bcd60e51b8152600401610ae7906135c4565b60725460ff600160281b90910416151581151514611e7f576072805465ff00000000001916600160281b8315158102919091179182905560ff91041615611e4557426073556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a150565b607354611e529042613989565b6074556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a15b50565b611e8a612619565b611e92612672565b6000604051806101000160405280611ea86126b8565b6001600160a01b031681526020018d8d808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208d810282810182019093528d82529283019290918e918e9182918501908490808284376000920191909152505050908252506040805160208b810282810182019093528b82529283019290918c918c91829185019084908082843760009201919091525050509082525060408051602089810282810182019093528982529283019290918a918a918291850190849080828437600092019190915250505090825250602081018690526001600160a01b0380861660408084019190915261ffff8616606090930192909252606654915163c09d4f2760e01b815292935073__$d722caef77098c4278f7cc499b02a86af3$__9263c09d4f2792611ffe921690606790869060040161399c565b60006040518083038186803b15801561201657600080fd5b505af415801561202a573d6000803e3d6000fd5b50505050506120396001603355565b5050505050505050505050565b606654604051631285c83d60e01b81526001600160a01b03909116600482015260676024820152604481018290526000908190819073__$fdc5093381d4a0b296ee33d1f23655684f$__90631285c83d90606401606060405180830381865af41580156120b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120db9190613a84565b9250925092509193909250565b600054610100900460ff16158080156121085750600054600160ff909116105b806121225750303b158015612122575060005460ff166001145b6121855760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610ae7565b6000805460ff1916600117905580156121a8576000805461ff0019166101001790555b610100606e55606680546001600160a01b0319166001600160a01b0384161790558015610a24576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001610eed565b6060606d5467ffffffffffffffff81111561222857612228612b5d565b604051908082528060200260200182016040528015612251578160200160208202803683370190505b50905060005b606d548110156122a457600081815260676020526040902060080154825183908390811061228757612287613ab2565b60209081029190910101528061229c81613ac8565b915050612257565b5090565b6122b06126b8565b6001600160a01b0316606660009054906101000a90046001600160a01b03166001600160a01b0316639b7ae5ec6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561230c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233091906135a7565b6001600160a01b0316146123565760405162461bcd60e51b8152600401610ae7906135c4565b60009182526067602052604090912060090155565b612373612619565b61237b612672565b73__$d722caef77098c4278f7cc499b02a86af3$__63a1aebc73606660009054906101000a90046001600160a01b0316606760405180606001604052806123c06126b8565b6001600160a01b03908116825260208083018a9052604092830189905282516001600160e01b031960e089901b1681529582166004870152602486019490945282511660448501529181015160648401520151608482015260a4016109ea565b6000818152606760205260408120610783906127ba565b61243f6126b8565b6001600160a01b0316606660009054906101000a90046001600160a01b03166001600160a01b0316639b7ae5ec6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561249b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124bf91906135a7565b6001600160a01b0316146124e55760405162461bcd60e51b8152600401610ae7906135c4565b60008281526067602052604090819020600301549051632b2b063960e21b8152600481018390526001600160a01b039091169063acac18e490602401611cc5565b61252e612619565b612536612672565b73__$d722caef77098c4278f7cc499b02a86af3$__63b45bd138606660009054906101000a90046001600160a01b03166067604051806060016040528061257b6126b8565b6001600160a01b0316815260200189898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050509082525060408051602089810282810182019093528982529283019290918a918a91829185019084908082843760009201919091525050509152506040516001600160e01b031960e086901b168152610bfd93929190600401613ae1565b60026033540361266b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610ae7565b6002603355565b60725460408051808201909152600381526234303160e81b602082015290600160281b900460ff1615611e7f5760405162461bcd60e51b8152600401610ae791906138c2565b60006126c33361280e565b156126d5575060131936013560601c90565b503390565b60048281015460405163e78c9b3b60e01b81526001600160a01b03848116938201939093526000929091169063e78c9b3b90602401602060405180830381865afa15801561272c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfc9190613b3c565b600e81015460009064ffffffffff9081169042168103612783575050600c0154600160801b90046001600160801b031690565b600c830154600d840154600091610a31916001600160801b03600160801b928390048116926127b492041685612897565b906128a4565b600e81015460009064ffffffffff90811690421681036127e6575050600c01546001600160801b031690565b600c830154600d840154600091610a31916001600160801b03918216916127b49116856128e6565b6066546040805163862beee160e01b815290516000926001600160a01b03169163862beee19160048083019260209291908290030181865afa158015612858573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061287c91906135a7565b6001600160a01b0316826001600160a01b0316149050919050565b6000610dfc83834261292c565b6000610dfc6b033b2e3c9fd0803ce80000006128e06128c38686612a55565b6128da60026b033b2e3c9fd0803ce8000000613b55565b90612a61565b90612a6d565b6000806128fa64ffffffffff841642613989565b90506b033b2e3c9fd0803ce80000006301e133806129188387613b77565b6129229190613b55565b610a319190613836565b60008061294064ffffffffff851684613989565b90508060000361295f576b033b2e3c9fd0803ce8000000915050610dfc565b600061296c600183613989565b905060006002831161297f57600061298a565b61298a600284613989565b9050600061299c6301e1338089613b55565b905060006129aa82806128a4565b905060006129b882846128a4565b905060006002836129c9888a613b77565b6129d39190613b77565b6129dd9190613b55565b90506000600683876129ef8a8c613b77565b6129f99190613b77565b612a039190613b77565b612a0d9190613b55565b90508082612a1b8a88613b77565b612a31906b033b2e3c9fd0803ce8000000613836565b612a3b9190613836565b612a459190613836565b9c9b505050505050505050505050565b6000610dfc8284613b77565b6000610dfc8284613836565b6000610dfc8284613b55565b600060208284031215612a8b57600080fd5b81356001600160e01b031981168114610dfc57600080fd5b600080600060608486031215612ab857600080fd5b505081359360208301359350604090920135919050565b6001600160a01b0381168114611e7f57600080fd5b8035612aef81612acf565b919050565b600080600060608486031215612b0957600080fd5b83359250602084013591506040840135612b2281612acf565b809150509250925092565b60008060408385031215612b4057600080fd5b823591506020830135612b5281612acf565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612b8457600080fd5b813567ffffffffffffffff80821115612b9f57612b9f612b5d565b604051601f8301601f19908116603f01168101908282118183101715612bc757612bc7612b5d565b81604052838152866020858801011115612be057600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060008060808587031215612c1657600080fd5b8435612c2181612acf565b93506020850135612c3181612acf565b925060408501359150606085013567ffffffffffffffff811115612c5457600080fd5b612c6087828801612b73565b91505092959194509250565b803561ffff81168114612aef57600080fd5b60008060008060808587031215612c9457600080fd5b84359350602085013592506040850135612cad81612acf565b9150612cbb60608601612c6c565b905092959194509250565b60008083601f840112612cd857600080fd5b50813567ffffffffffffffff811115612cf057600080fd5b6020830191508360208260051b8501011115612d0b57600080fd5b9250929050565b6000806000806000806000806080898b031215612d2e57600080fd5b883567ffffffffffffffff80821115612d4657600080fd5b612d528c838d01612cc6565b909a50985060208b0135915080821115612d6b57600080fd5b612d778c838d01612cc6565b909850965060408b0135915080821115612d9057600080fd5b612d9c8c838d01612cc6565b909650945060608b0135915080821115612db557600080fd5b50612dc28b828c01612cc6565b999c989b5096995094979396929594505050565b60008060408385031215612de957600080fd5b50508035926020909101359150565b6020808252825182820181905260009190848201906040850190845b81811015612e395783516001600160a01b031683529284019291840191600101612e14565b50909695505050505050565b60008060008060408587031215612e5b57600080fd5b843567ffffffffffffffff80821115612e7357600080fd5b612e7f88838901612cc6565b90965094506020870135915080821115612e9857600080fd5b50612ea587828801612cc6565b95989497509550505050565b60008060008060808587031215612ec757600080fd5b843567ffffffffffffffff811115612ede57600080fd5b85016103408188031215612ef157600080fd5b93506020850135612f0181612acf565b92506040850135612f1181612acf565b91506060850135612f2181612acf565b939692955090935050565b60008060008060808587031215612f4257600080fd5b8435612f4d81612acf565b93506020850135612f5d81612acf565b93969395505050506040820135916060013590565b60008060008060008060608789031215612f8b57600080fd5b863567ffffffffffffffff80821115612fa357600080fd5b612faf8a838b01612cc6565b90985096506020890135915080821115612fc857600080fd5b612fd48a838b01612cc6565b90965094506040890135915080821115612fed57600080fd5b50612ffa89828a01612cc6565b979a9699509497509295939492505050565b60008060008060008060c0878903121561302557600080fd5b86359550602087013561303781612acf565b9450604087013561304781612acf565b959894975094956060810135955060808101359460a0909101359350915050565b60006020828403121561307a57600080fd5b5035919050565b6000815180845260005b818110156130a75760208185018101518683018201520161308b565b506000602082860101526020601f19601f83011685010191505092915050565b602081526130d9602082018351519052565b600060208301516130f560408401826001600160a01b03169052565b5060408301516001600160a01b03811660608401525060608301516001600160a01b03811660808401525060808301516001600160a01b03811660a08401525060a08301516001600160a01b03811660c08401525060c08301516001600160a01b03811660e08401525060e0830151610220610100818186015261317d610240860184613081565b90860151610120868101919091528601516101408087019190915286015161016080870191909152860151610180808701919091528601519092506101a06131cf818701836001600160801b03169052565b86015190506101c06131eb868201836001600160801b03169052565b86015190506101e0613207868201836001600160801b03169052565b8601519050610200613223868201836001600160801b03169052565b9095015164ffffffffff1693019290925250919050565b600080600080600080600060e0888a03121561325557600080fd5b873596506020880135955060408801359450606088013593506080880135925060a088013561328381612acf565b915061329160c08901612c6c565b905092959891949750929550565b600080600080608085870312156132b557600080fd5b84356132c081612acf565b935060208501359250604085013591506060850135612f2181612acf565b60008060008060008060008060a0898b0312156132fa57600080fd5b883561330581612acf565b9750602089013561331581612acf565b9650604089013567ffffffffffffffff8082111561333257600080fd5b61333e8c838d01612cc6565b909850965060608b013591508082111561335757600080fd5b6133638c838d01612cc6565b909650945060808b013591508082111561337c57600080fd5b818b0191508b601f83011261339057600080fd5b81358181111561339f57600080fd5b8c60208285010111156133b157600080fd5b6020830194508093505050509295985092959890939650565b6000602082840312156133dc57600080fd5b81358015158114610dfc57600080fd5b600080600080600080600080600080600060e08c8e03121561340d57600080fd5b67ffffffffffffffff808d35111561342457600080fd5b6134318e8e358f01612cc6565b909c509a5060208d013581101561344757600080fd5b6134578e60208f01358f01612cc6565b909a50985060408d013581101561346d57600080fd5b61347d8e60408f01358f01612cc6565b909850965060608d013581101561349357600080fd5b506134a48d60608e01358e01612cc6565b909550935060808c013592506134bc60a08d01612ae4565b91506134ca60c08d01612c6c565b90509295989b509295989b9093969950565b6000602082840312156134ee57600080fd5b8135610dfc81612acf565b6020808252825182820181905260009190848201906040850190845b81811015612e3957835183529284019291840191600101613515565b600080600080600060a0868803121561354957600080fd5b853561355481612acf565b9450602086013561356481612acf565b93506040860135925060608601359150608086013567ffffffffffffffff81111561358e57600080fd5b61359a88828901612b73565b9150509295509295909350565b6000602082840312156135b957600080fd5b8151610dfc81612acf565b602080825260029082015261433160f01b604082015260600190565b600081518084526020808501945080840160005b838110156136195781516001600160a01b0316875295820195908201906001016135f4565b509495945050505050565b600081518084526020808501945080840160005b8381101561361957815187529582019590820190600101613638565b600060018060a01b0380861683528460208401526060604084015280845116606084015250602083015160a060808401526136936101008401826135e0565b90506040840151605f19808584030160a08601526136b18383613624565b925060608601519150808584030160c08601526136ce8383613624565b925060808601519150808584030160e0860152506136ec82826135e0565b979650505050505050565b600060018060a01b038086168352846020840152606060408401528084511660608401525060208301516060608084015261373560c0840182613624565b90506040840151605f198483030160a08501526136ec82826135e0565b600060018060a01b038086168352602085818501526060604085015281855116606085015280850151915060a06080850152613792610100850183613624565b91506040850151605f19808685030160a08701526137b08483613624565b935060608701519150808685030160c08701526137cd84836135e0565b608088015187820390920160e088015281518082529184019450600092508301905b8083101561381357845161ffff1682529383019360019290920191908301906137ef565b5098975050505050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561078357610783613820565b600060018060a01b0380861683528460208401526060604084015280845116606084015250602083015160808084015261388660e0840182613624565b90506040840151605f19808584030160a08601526138a48383613624565b925060608601519150808584030160c0860152506136ec8282613624565b602081526000610dfc6020830184613081565b600181811c908216806138e957607f821691505b60208210810361390957634e487b7160e01b600052602260045260246000fd5b50919050565b8281526040602082015260018060a01b038251166040820152600060208301516080606084015261394360c0840182613624565b90506040840151603f19808584030160808601526139618383613624565b925060608601519150808584030160a08601525061397f82826135e0565b9695505050505050565b8181038181111561078357610783613820565b60018060a01b0384168152826020820152606060408201526139ca6060820183516001600160a01b03169052565b600060208301516101008060808501526139e8610160850183613624565b91506040850151605f19808685030160a0870152613a068483613624565b935060608701519150808685030160c0870152613a238483613624565b935060808701519150808685030160e087015250613a418382613624565b92505060a0850151818501525060c0840151613a696101208501826001600160a01b03169052565b5060e084015161ffff81166101408501525095945050505050565b600080600060608486031215613a9957600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052603260045260246000fd5b600060018201613ada57613ada613820565b5060010190565b600060018060a01b0380861683528460208401526060604084015280845116606084015250602083015160606080840152613b1f60c0840182613624565b90506040840151605f198483030160a08501526136ec8282613624565b600060208284031215613b4e57600080fd5b5051919050565b600082613b7257634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613b9157613b91613820565b50029056fea2646970667358221220bf13109ac32312ef7f4fc820ff900c72df32d18516e9ca51cf41a0abd6107a1164736f6c63430008100033",
    "sourceMap": "2499:24490:143:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26036:338;;;;;;:::i;:::-;;:::i;:::-;;;470:14:174;;463:22;445:41;;433:2;418:18;26036:338:143;;;;;;;;12490:517;;;;;;:::i;:::-;;:::i;:::-;;19866:119;19957:20;;19866:119;;;964:25:174;;;952:2;937:18;19866:119:143;818:177:174;7969:471:143;;;;;;:::i;:::-;;:::i;13767:463::-;;;;;;:::i;:::-;;:::i;24714:164::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;;3670:33:174;;;3652:52;;3640:2;3625:18;24714:164:143;3508:202:174;22812:219:143;;;;;;:::i;:::-;;:::i;6352:599::-;;;;;;:::i;:::-;;:::i;15634:636::-;;;;;;:::i;:::-;;:::i;21899:185::-;;;;;;:::i;:::-;;:::i;17619:247::-;;;;;;:::i;:::-;;:::i;19386:182::-;;;:::i;:::-;;;;;;;:::i;14238:506::-;;;;;;:::i;:::-;;:::i;19576:172::-;;;:::i;4161:1924::-;;;;;;:::i;:::-;;:::i;6959:670::-;;;;;;:::i;:::-;;:::i;18755:307::-;;;;;;:::i;:::-;;:::i;17522:89::-;17596:7;;-1:-1:-1;;;17596:7:143;;;;17522:89;;13015:574;;;;;;:::i;:::-;;:::i;20541:613::-;;;;;;:::i;:::-;;:::i;18242:125::-;;;;;;:::i;:::-;;:::i;18546:201::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;23289:184::-;;;;;;:::i;:::-;;:::i;17874:138::-;17968:15;;17985:18;;17874:138;;;;15869:25:174;;;15925:2;15910:18;;15903:34;;;;15842:18;17874:138:143;15695:248:174;21520:168:143;;;;;;:::i;:::-;;:::i;775:43:144:-;;;;;-1:-1:-1;;;;;775:43:144;;;;;;-1:-1:-1;;;;;16140:32:174;;;16122:51;;16110:2;16095:18;775:43:144;15948:231:174;22246:285:143;;;;;;:::i;:::-;22379:4;22478:20;;;:9;:20;;;;;12792:9:123;12836:12;12824:24;;12823:31;;;12875:12;12863:24;;12862:31;;;12914:15;12902:27;;12901:34;;;12956:24;12944:36;;;12943:43;;;22246:285:143;;;;;16416:14:174;;16409:22;16391:41;;16475:14;;16468:22;16463:2;16448:18;;16441:50;16534:14;;16527:22;16507:18;;;16500:50;;;;16593:14;16586:22;16581:2;16566:18;;16559:50;16378:3;16363:19;22246:285:143;16184:431:174;9593:790:143;;;;;;:::i;:::-;;:::i;8448:526::-;;;;;;:::i;:::-;;:::i;24173:280::-;;;;;;:::i;:::-;24257:7;24308:20;;;:9;:20;;;;;;;;5332:9:123;5331:77;;;;;;;;;2658:2;10891:75;;;;;;24173:280:143;15061:565;;;;;;:::i;:::-;;:::i;23481:201::-;;;;;;:::i;:::-;;:::i;25608:213::-;;;;;;:::i;:::-;;:::i;17086:365::-;;;;;;:::i;:::-;;:::i;10475:896::-;;;;;;:::i;:::-;;:::i;23913:252::-;;;;;;:::i;:::-;;:::i;:::-;;;;22484:25:174;;;22540:2;22525:18;;22518:34;;;;22568:18;;;22561:34;22472:2;22457:18;23913:252:143;22282:319:174;3273:173:143;;;;;;:::i;:::-;;:::i;19070:308::-;;;:::i;:::-;;;;;;;:::i;16682:203::-;;;;;;:::i;:::-;;:::i;11544:443::-;;;;;;:::i;:::-;;:::i;21162:164::-;;;;;;:::i;:::-;;:::i;23690:213::-;;;;;;:::i;:::-;;:::i;16447:227::-;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;16632:20:143;;;:9;:20;;;;;16625:41;;;;;;;;;;;;16447:227;;;;23743:13:174;;23725:32;;23713:2;23698:18;16447:227:143;23495:268:174;25143:175:143;;;;;;:::i;:::-;-1:-1:-1;;;25143:175:143;;;;;;;;18112:122;18210:16;;-1:-1:-1;;;;;18210:16:143;18112:122;;11995:487;;;;;;:::i;:::-;;:::i;26036:338::-;26122:4;-1:-1:-1;;;;;;26159:61:143;;-1:-1:-1;;;26159:61:143;;:138;;-1:-1:-1;;;;;;;26237:60:143;;-1:-1:-1;;;26237:60:143;26159:138;:207;;;-1:-1:-1;;;;;;;26314:52:143;;-1:-1:-1;;;26314:52:143;26159:207;26139:227;26036:338;-1:-1:-1;;26036:338:143:o;12490:517::-;2505:21:20;:19;:21::i;:::-;3622:16:143::1;:14;:16::i;:::-;12692:11:::2;:28;12735:16;;;;;;;;;-1:-1:-1::0;;;;;12735:16:143::2;12766:9;12790:198;;;;;;;;12853:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;12790:198:143;;::::2;::::0;;::::2;::::0;;::::2;::::0;;;;;;;;;;;;;;;;;12692:307;;-1:-1:-1;;;;;;12692:307:143::2;::::0;;;;;;25942:15:174;;;12692:307:143::2;::::0;::::2;25924:34:174::0;25974:18;;;25967:34;;;;26041:13;;26037:22;;;26017:18;;;26010:50;26102:15;;26096:22;26076:18;;;26069:50;26162:15;;;26156:22;26135:19;;;26128:51;26222:15;26216:22;26195:19;;;26188:51;25858:19;;12692:307:143::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;2547:20:20::0;1787:1;3053:7;:22;2873:209;2547:20;12490:517:143;;;:::o;7969:471::-;2505:21:20;:19;:21::i;:::-;3622:16:143::1;:14;:16::i;:::-;8168:11:::2;:27;8210:9;8234:187;;;;;;;;8296:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;8234:187:143;;::::2;::::0;;::::2;::::0;;::::2;::::0;;;;;;;;;;;;::::2;::::0;;;;;8168:264;;-1:-1:-1;;;;;;8168:264:143::2;::::0;;;;;;::::2;::::0;::::2;26561:25:174::0;;;;26664:13;;26660:22;;26640:18;;;26633:50;26725:15;;;26719:22;26699:18;;;26692:50;26784:15;;26778:22;26758:18;;;26751:50;26848:15;;26842:22;26838:31;26817:19;;;26810:60;26533:19;;8168:264:143::2;26250:626:174::0;13767:463:143;2505:21:20;:19;:21::i;:::-;3622:16:143::1;:14;:16::i;:::-;13945:14:::2;:29;13989:16;;;;;;;;;-1:-1:-1::0;;;;;13989:16:143::2;14020:9;14044:167;;;;;;;;14105:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;14044:167:143;;::::2;::::0;;::::2;::::0;;::::2;::::0;;;;;::::2;::::0;;;;;13945:277;;-1:-1:-1;;;;;;13945:277:143::2;::::0;;;;;;27300:15:174;;;13945:277:143::2;::::0;::::2;27282:34:174::0;27332:18;;;27325:34;;;;27399:13;;27395:22;;27375:18;;;27368:50;27460:15;;;27454:22;27434:18;;;27427:50;27524:15;27518:22;27514:31;27493:19;;;27486:60;27216:19;;13945:277:143::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;2547:20:20::0;1787:1;3053:7;:22;2873:209;2547:20;13767:463:143;;:::o;24714:164::-;-1:-1:-1;;;24714:164:143;;;;;;;:::o;22812:219::-;3539:12;:10;:12::i;:::-;-1:-1:-1;;;;;3501:50:143;:16;;;;;;;;;-1:-1:-1;;;;;3501:16:143;-1:-1:-1;;;;;3501:32:143;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3501:50:143;;3493:65;;;;-1:-1:-1;;;3493:65:143;;;;;;;:::i;:::-;;;;;;;;;22969:20:::1;::::0;;;:9:::1;:20;::::0;;;;;:40:::1;;:54:::0;;-1:-1:-1;;;;;;22969:54:143::1;-1:-1:-1::0;;;;;22969:54:143;;::::1;::::0;;;::::1;::::0;;22812:219::o;6352:599::-;2505:21:20;:19;:21::i;:::-;3622:16:143::1;:14;:16::i;:::-;6588:11:::2;:26;6629:16;;;;;;;;;-1:-1:-1::0;;;;;6629:16:143::2;6660:9;6684:248;;;;;;;;6745:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;6684:248:143;;::::2;::::0;;::::2;::::0;;::::2;::::0;;;;;;;;;;;;::::2;::::0;;;;;;;;::::2;::::0;;::::2;::::0;;;;;6588:355;;-1:-1:-1;;;;;;6588:355:143::2;::::0;;;;;;28657:15:174;;;6588:355:143::2;::::0;::::2;28639:34:174::0;28689:18;;;28682:34;;;;28756:13;;28752:22;;28732:18;;;28725:50;28817:15;;;28811:22;28791:18;;;28784:50;28877:15;;28871:22;28850:19;;;28843:51;28941:15;;28935:22;28931:31;28910:19;;;28903:60;29010:16;29004:23;29000:36;28979:19;;;28972:65;28573:19;;6588:355:143::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;2547:20:20::0;1787:1;3053:7;:22;2873:209;2547:20;6352:599:143;;;;:::o;15634:636::-;2505:21:20;:19;:21::i;:::-;3622:16:143::1;:14;:16::i;:::-;15911:14:::2;:30;15956:16;;;;;;;;;-1:-1:-1::0;;;;;15956:16:143::2;15987:9;16011:240;;;;;;;;16073:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;16011:240:143::2;;;;;16112:6;;16011:240;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;;;16011:240:143;;;-1:-1:-1;16011:240:143::2;::::0;;::::2;::::0;;::::2;::::0;;;;;;;;;;;;;::::2;::::0;;;16146:7;;;;;;16011:240;::::2;::::0;16146:7;;16011:240;16146:7;16011:240;::::2;;::::0;::::2;::::0;;;;-1:-1:-1;;;16011:240:143;;;-1:-1:-1;16011:240:143::2;::::0;;::::2;::::0;;::::2;::::0;;;;;;;;;;;;;::::2;::::0;;;16183:9;;;;;;16011:240;::::2;::::0;16183:9;;16011:240;16183:9;16011:240;::::2;;::::0;::::2;::::0;;;;-1:-1:-1;;;16011:240:143;;;-1:-1:-1;16011:240:143::2;::::0;;::::2;::::0;;::::2;::::0;;;;;;;;;;;;;::::2;::::0;;;16224:11;;;;;;16011:240;::::2;::::0;16224:11;;16011:240;16224:11;16011:240;::::2;;::::0;::::2;::::0;;;;-1:-1:-1;;;16011:240:143;;-1:-1:-1;15911:351:143::2;::::0;-1:-1:-1;;;;;;15911:351:143::2;::::0;;;;;;::::2;::::0;;;;::::2;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;2547:20:20::0;1787:1;3053:7;:22;2873:209;2547:20;15634:636:143;;;;;;;;:::o;21899:185::-;21998:7;22025:20;;;:9;:20;;;;;:51;;22071:4;22025:45;:51::i;:::-;22018:58;21899:185;-1:-1:-1;;;21899:185:143:o;17619:247::-;3539:12;:10;:12::i;:::-;-1:-1:-1;;;;;3501:50:143;:16;;;;;;;;;-1:-1:-1;;;;;3501:16:143;-1:-1:-1;;;;;3501:32:143;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3501:50:143;;3493:65;;;;-1:-1:-1;;;3493:65:143;;;;;;;:::i;:::-;17729:15:::1;:27:::0;;;17767:18:::1;:33:::0;;;17816:42:::1;::::0;;15869:25:174;;;15925:2;15910:18;;15903:34;;;17816:42:143::1;::::0;15842:18:174;17816:42:143::1;;;;;;;;17619:247:::0;;:::o;19386:182::-;19492:16;19534:26;19527:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19527:33:143;;;;;;;;;;;;;;;;;;;;;;;19386:182;:::o;14238:506::-;2505:21:20;:19;:21::i;:::-;3622:16:143::1;:14;:16::i;:::-;14445:14:::2;:34;14494:16;;;;;;;;;-1:-1:-1::0;;;;;14494:16:143::2;14525:9;14549:176;;;;;;;;14615:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;14549:176:143::2;;;;;14657:9;;14549:176;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;;;14549:176:143;;;-1:-1:-1;14549:176:143::2;::::0;;::::2;::::0;;::::2;::::0;;;;;;;;;;;;;::::2;::::0;;;14698:11;;;;;;14549:176;::::2;::::0;14698:11;;14549:176;14698:11;14549:176;::::2;;::::0;::::2;::::0;;;;-1:-1:-1;;;14549:176:143;;-1:-1:-1;14445:291:143::2;::::0;-1:-1:-1;;;;;;14445:291:143::2;::::0;;;;;;::::2;::::0;;;;::::2;;;:::i;19576:172::-:0;19677:16;19719:21;19712:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19712:28:143;;;;;;;;;;;;;;;;;;;;;;19576:172;:::o;4161:1924::-;4421:7;3539:12;:10;:12::i;:::-;-1:-1:-1;;;;;3501:50:143;:16;;;;;;;;;-1:-1:-1;;;;;3501:16:143;-1:-1:-1;;;;;3501:32:143;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3501:50:143;;3493:65;;;;-1:-1:-1;;;3493:65:143;;;;;;;:::i;6959:670::-;2505:21:20;:19;:21::i;:::-;3622:16:143::1;:14;:16::i;:::-;7247:11:::2;:31;7293:16;;;;;;;;;-1:-1:-1::0;;;;;7293:16:143::2;7324:9;7348:262;;;;;;;;7414:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;7348:262:143::2;;;;;7454:7;;7348:262;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;;;7348:262:143;;;-1:-1:-1;7348:262:143::2;::::0;;::::2;::::0;;::::2;::::0;;;;;;;;;;;;;::::2;::::0;;;7493:10;;;;;;7348:262;::::2;::::0;7493:10;;7348:262;7493:10;7348:262;::::2;;::::0;::::2;::::0;;;;-1:-1:-1;;;7348:262:143;;;-1:-1:-1;7348:262:143::2;::::0;;::::2;::::0;;::::2;::::0;;;;;;;;;;;;;::::2;::::0;;;7536:11;;;;;;7348:262;::::2;::::0;7536:11;;7348:262;7536:11;7348:262;::::2;;::::0;::::2;::::0;;;;-1:-1:-1;;;7348:262:143;;;-1:-1:-1;7348:262:143::2;::::0;;::::2;::::0;;::::2;::::0;;;;;;;;;;;;;::::2;::::0;;;7581:13;;;;;;7348:262;::::2;::::0;7581:13;;7348:262;7581:13;7348:262;::::2;;::::0;::::2;::::0;;;;-1:-1:-1;;;7348:262:143;;-1:-1:-1;7247:374:143::2;::::0;-1:-1:-1;;;;;;7247:374:143::2;::::0;;;;;;::::2;::::0;;;;::::2;;;:::i;18755:307::-:0;-1:-1:-1;;;;;18999:23:143;;;18966:7;18999:23;;;:11;:23;;;;;;;;:30;;;;;;;;;;;18966:7;19030:23;19043:10;19030;:23;:::i;:::-;18999:55;;;;;;;;;;;;18992:62;;18755:307;;;;;;:::o;13015:574::-;2505:21:20;:19;:21::i;:::-;3622:16:143::1;:14;:16::i;:::-;13258:11:::2;:33;13306:16;;;;;;;;;-1:-1:-1::0;;;;;13306:16:143::2;13337:9;13361:209;;;;;;;;13429:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;13361:209:143::2;;;;;13471:9;;13361:209;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;;;13361:209:143;;;-1:-1:-1;13361:209:143::2;::::0;;::::2;::::0;;::::2;::::0;;;;;;;;;;;;;::::2;::::0;;;13508:7;;;;;;13361:209;::::2;::::0;13508:7;;13361:209;13508:7;13361:209;::::2;;::::0;::::2;::::0;;;;-1:-1:-1;;;13361:209:143;;;-1:-1:-1;13361:209:143::2;::::0;;::::2;::::0;;::::2;::::0;;;;;;;;;;;;;::::2;::::0;;;13545:9;;;;;;13361:209;::::2;::::0;13545:9;;13361:209;13545:9;13361:209;::::2;;::::0;::::2;::::0;;;;-1:-1:-1;;;13361:209:143;;-1:-1:-1;13258:323:143::2;::::0;-1:-1:-1;;;;;;13258:323:143::2;::::0;;;;;;::::2;::::0;;;;::::2;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;2547:20:20::0;1787:1;3053:7;:22;2873:209;2547:20;13015:574:143;;;;;;:::o;20541:613::-;3622:16;:14;:16::i;:::-;20936:33:::1;20972:20:::0;;;:9:::1;:20;::::0;;;;21027:21:::1;::::0;::::1;::::0;-1:-1:-1;;;;;21027:21:143::1;21011:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;21011:37:143::1;;21050:34;;;;;;;;;;;;;-1:-1:-1::0;;;21050:34:143::1;;::::0;21003:82:::1;;;;;-1:-1:-1::0;;;21003:82:143::1;;;;;;;;:::i;21098:47::-;20824:330;20541:613:::0;;;;;;:::o;18242:125::-;3539:12;:10;:12::i;:::-;-1:-1:-1;;;;;3501:50:143;:16;;;;;;;;;-1:-1:-1;;;;;3501:16:143;-1:-1:-1;;;;;3501:32:143;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3501:50:143;;3493:65;;;;-1:-1:-1;;;3493:65:143;;;;;;;:::i;:::-;18333:20:::1;:26:::0;18242:125::o;18546:201::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18719:20:143;;;;:9;:20;;;;;;;;;18712:27;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18712:27:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18712:27:143;;;-1:-1:-1;;18712:27:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18712:27:143;;;;;;;-1:-1:-1;;;18712:27:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18546:201;-1:-1:-1;;18546:201:143:o;23289:184::-;3539:12;:10;:12::i;:::-;-1:-1:-1;;;;;3501:50:143;:16;;;;;;;;;-1:-1:-1;;;;;3501:16:143;-1:-1:-1;;;;;3501:32:143;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3501:50:143;;3493:65;;;;-1:-1:-1;;;3493:65:143;;;;;;;:::i;:::-;23410:20:::1;::::0;;;:9:::1;:20;::::0;;;;;:55;23289:184::o;21520:168::-;21613:7;21640:20;;;:9;:20;;;;;:40;;:38;:40::i;9593:790::-;2505:21:20;:19;:21::i;:::-;3622:16:143::1;:14;:16::i;:::-;9910:11:::2;:25;9950:16;;;;;;;;;-1:-1:-1::0;;;;;9950:16:143::2;9981:9;10005:359;;;;;;;;10065:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;10005:359:143;;::::2;::::0;;::::2;::::0;;::::2;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::2;::::0;;;;;;;;::::2;::::0;;::::2;::::0;;;;;9910:465;;-1:-1:-1;;;;;;9910:465:143;;;;;;36394:15:174;;;9910:465:143::2;::::0;::::2;36376:34:174::0;36426:18;;;36419:34;;;;36493:13;;36489:22;;36469:18;;;36462:50;36554:15;;;36548:22;36528:18;;;36521:50;36614:15;;;36608:22;36587:19;;;36580:51;36674:15;;;36668:22;36647:19;;;36640:51;36734:16;;36728:23;36707:19;;;36700:52;36795:16;;36789:23;36768:19;;;36761:52;36860:16;;36854:23;36850:32;36829:19;;;36822:61;36930:16;36924:23;36920:36;36899:19;;;36892:65;36310:19;;9910:465:143::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;2547:20:20::0;1787:1;3053:7;:22;2873:209;8448:526:143;2505:21:20;:19;:21::i;:::-;3622:16:143::1;:14;:16::i;:::-;8686:11:::2;:32;8733:9;8757:198;;;;;;;;8824:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;8757:198:143::2;;;;;8864:7;;8757:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;;;8757:198:143;;;-1:-1:-1;8757:198:143::2;::::0;;::::2;::::0;;::::2;::::0;;;;;;;;;;;;;::::2;::::0;;;8902:10;;;;;;8757:198;::::2;::::0;8902:10;;8757:198;8902:10;8757:198;::::2;;::::0;::::2;::::0;;;;-1:-1:-1;;;8757:198:143;;;-1:-1:-1;8757:198:143::2;::::0;;::::2;::::0;;::::2;::::0;;;;;;;;;;;;;::::2;::::0;;;8936:3;;;;;;8757:198;::::2;::::0;8936:3;;8757:198;8936:3;8757:198;::::2;;::::0;::::2;::::0;;;;-1:-1:-1;;;8757:198:143;;-1:-1:-1;8686:280:143::2;::::0;-1:-1:-1;;;;;;8686:280:143::2;::::0;;;;;;::::2;::::0;;;::::2;;;:::i;15061:565::-:0;2505:21:20;:19;:21::i;:::-;3622:16:143::1;:14;:16::i;:::-;15285:14:::2;:25;15325:16;;;;;;;;;-1:-1:-1::0;;;;;15325:16:143::2;15356:9;15380:227;;;;;;;;15437:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;15380:227:143;;::::2;::::0;;;;::::2;;::::0;;::::2;::::0;;;;;;;;;;;;;;;;;;;;::::2;::::0;;;;;15285:333;;-1:-1:-1;;;;;;15285:333:143::2;::::0;;;;;;38408:15:174;;;15285:333:143::2;::::0;::::2;38390:34:174::0;38440:18;;;38433:34;;;;38507:13;;38503:22;;38483:18;;;38476:50;38572:15;;;38566:22;38562:31;;38542:18;;;38535:59;38637:15;;38631:22;38610:19;;;38603:51;38697:15;;;38691:22;38670:19;;;38663:51;38761:16;38755:23;38751:32;38730:19;;;38723:61;38324:19;;15285:333:143::2;37997:793:174::0;23481:201:143;3539:12;:10;:12::i;:::-;-1:-1:-1;;;;;3501:50:143;:16;;;;;;;;;-1:-1:-1;;;;;3501:16:143;-1:-1:-1;;;;;3501:32:143;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3501:50:143;;3493:65;;;;-1:-1:-1;;;3493:65:143;;;;;;;:::i;:::-;23605:20:::1;::::0;;;:9:::1;:20;::::0;;;;;;:34:::1;;::::0;23597:77;;-1:-1:-1;;;23597:77:143;;-1:-1:-1;;;;;16140:32:174;;;23597:77:143::1;::::0;::::1;16122:51:174::0;23605:34:143;;::::1;::::0;23597:68:::1;::::0;16095:18:174;;23597:77:143::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;25608:213:::0;25775:37;;;;;;;;;;;-1:-1:-1;;;25775:37:143;;;;25768:45;;-1:-1:-1;;;25768:45:143;;25749:6;;25768:45;;;;;:::i;17086:365::-;3539:12;:10;:12::i;:::-;-1:-1:-1;;;;;3501:50:143;:16;;;;;;;;;-1:-1:-1;;;;;3501:16:143;-1:-1:-1;;;;;3501:32:143;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3501:50:143;;3493:65;;;;-1:-1:-1;;;3493:65:143;;;;;;;:::i;:::-;17164:7:::1;::::0;::::1;-1:-1:-1::0;;;17164:7:143;;::::1;;:14;;::::0;::::1;;;17160:284;;17191:7;:13:::0;;-1:-1:-1;;17191:13:143::1;-1:-1:-1::0;;;17191:13:143;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;::::1;17219:7:::0;::::1;;17215:218;;;17261:15;17243;:33:::0;17296:8:::1;::::0;::::1;::::0;;;::::1;17086:365:::0;:::o;17215:218::-:1;17376:15;::::0;17358:33:::1;::::0;:15:::1;:33;:::i;:::-;17337:18;:54:::0;17411:10:::1;::::0;::::1;::::0;;;::::1;17215:218;17086:365:::0;:::o;10475:896::-;2505:21:20;:19;:21::i;:::-;3622:16:143::1;:14;:16::i;:::-;10843:48:::2;10894:339;;;;;;;;10955:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;10894:339:143::2;;;;;10991:7;;10894:339;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;;;10894:339:143;;;-1:-1:-1;10894:339:143::2;::::0;;::::2;::::0;;::::2;::::0;;;;;;;;;;;;;::::2;::::0;;;11023:8;;;;;;10894:339;::::2;::::0;11023:8;;10894:339;11023:8;10894:339;::::2;;::::0;::::2;::::0;;;;-1:-1:-1;;;10894:339:143;;;-1:-1:-1;10894:339:143::2;::::0;;::::2;::::0;;::::2;::::0;;;;;;;;;;;;;::::2;::::0;;;11059:11;;;;;;10894:339;::::2;::::0;11059:11;;10894:339;11059:11;10894:339;::::2;;::::0;::::2;::::0;;;;-1:-1:-1;;;10894:339:143;;;-1:-1:-1;10894:339:143::2;::::0;;::::2;::::0;;::::2;::::0;;;;;;;;;;;;;::::2;::::0;;;11097:10;;;;;;10894:339;::::2;::::0;11097:10;;10894:339;11097:10;10894:339;::::2;;::::0;::::2;::::0;;;;-1:-1:-1;;;10894:339:143;;;-1:-1:-1;10894:339:143::2;::::0;::::2;::::0;;;-1:-1:-1;;;;;10894:339:143;;::::2;::::0;;;;;;;;::::2;::::0;::::2;::::0;;;;;;;;11291:16:::2;::::0;11246:117;;-1:-1:-1;;;11246:117:143;;10843:390;;-1:-1:-1;11246:11:143::2;::::0;:30:::2;::::0;:117:::2;::::0;11291:16:::2;::::0;11322:9:::2;::::0;10843:390;;11246:117:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;10832:539;2547:20:20::0;1787:1;3053:7;:22;2873:209;2547:20;10475:896:143;;;;;;;;;;;:::o;23913:252::-;24081:16;;24030:127;;-1:-1:-1;;;24030:127:143;;-1:-1:-1;;;;;24081:16:143;;;24030:127;;;41099:51:174;24113:9:143;41166:18:174;;;41159:34;41209:18;;;41202:34;;;23985:7:143;;;;;;24030:14;;:36;;41072:18:174;;24030:127:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24023:134;;;;;;23913:252;;;;;:::o;3273:173::-;3268:19:18;3291:13;;;;;;3290:14;;3336:34;;;;-1:-1:-1;3354:12:18;;3369:1;3354:12;;;;:16;3336:34;3335:108;;;-1:-1:-1;3415:4:18;1476:19:32;:23;;;3376:66:18;;-1:-1:-1;3425:12:18;;;;;:17;3376:66;3314:201;;;;-1:-1:-1;;;3314:201:18;;41760:2:174;3314:201:18;;;41742:21:174;41799:2;41779:18;;;41772:30;41838:34;41818:18;;;41811:62;-1:-1:-1;;;41889:18:174;;;41882:44;41943:19;;3314:201:18;41558:410:174;3314:201:18;3525:12;:16;;-1:-1:-1;;3525:16:18;3540:1;3525:16;;;3551:65;;;;3585:13;:20;;-1:-1:-1;;3585:20:18;;;;;3551:65;3371:3:143::1;3348:20;:26:::0;3386:16:::1;:52:::0;;-1:-1:-1;;;;;;3386:52:143::1;-1:-1:-1::0;;;;;3386:52:143;::::1;;::::0;;3636:99:18;;;;3686:5;3670:21;;-1:-1:-1;;3670:21:18;;;3710:14;;-1:-1:-1;42125:36:174;;3710:14:18;;42113:2:174;42098:18;3710:14:18;41973:194:174;19070:308:143;19166:29;19243:14;;19229:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19229:29:143;;19214:44;;19274:6;19269:102;19290:14;;19286:1;:18;19269:102;;;19344:12;;;;:9;:12;;;;;:15;;;19326;;:12;;19354:1;;19326:15;;;;;;:::i;:::-;;;;;;;;;;:33;19306:3;;;;:::i;:::-;;;;19269:102;;;;19070:308;:::o;16682:203::-;3539:12;:10;:12::i;:::-;-1:-1:-1;;;;;3501:50:143;:16;;;;;;;;;-1:-1:-1;;;;;3501:16:143;-1:-1:-1;;;;;3501:32:143;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3501:50:143;;3493:65;;;;-1:-1:-1;;;3493:65:143;;;;;;;:::i;:::-;16825:20:::1;::::0;;;:9:::1;:20;::::0;;;;;:35:::1;;:52:::0;16682:203::o;11544:443::-;2505:21:20;:19;:21::i;:::-;3622:16:143::1;:14;:16::i;:::-;11717:11:::2;:24;11756:16;;;;;;;;;-1:-1:-1::0;;;;;11756:16:143::2;11787:9;11811:157;;;;;;;;11870:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;11811:157:143;;::::2;::::0;;::::2;::::0;;::::2;::::0;;;;;;;;;;11717:262;;-1:-1:-1;;;;;;11717:262:143::2;::::0;;;;;;42859:15:174;;;11717:262:143::2;::::0;::::2;42841:34:174::0;42891:18;;;42884:34;;;;42958:13;;42954:22;42934:18;;;42927:50;43019:15;;;43013:22;42993:18;;;42986:50;43079:15;43073:22;43052:19;;;43045:51;42775:19;;11717:262:143::2;42444:658:174::0;21162:164:143;21249:7;21276:20;;;:9;:20;;;;;:42;;:40;:42::i;23690:213::-;3539:12;:10;:12::i;:::-;-1:-1:-1;;;;;3501:50:143;:16;;;;;;;;;-1:-1:-1;;;;;3501:16:143;-1:-1:-1;;;;;3501:32:143;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3501:50:143;;3493:65;;;;-1:-1:-1;;;3493:65:143;;;;;;;:::i;:::-;23820:20:::1;::::0;;;:9:::1;:20;::::0;;;;;;:34:::1;;::::0;23812:83;;-1:-1:-1;;;23812:83:143;;::::1;::::0;::::1;964:25:174::0;;;-1:-1:-1;;;;;23820:34:143;;::::1;::::0;23812:71:::1;::::0;937:18:174;;23812:83:143::1;818:177:174::0;11995:487:143;2505:21:20;:19;:21::i;:::-;3622:16:143::1;:14;:16::i;:::-;12196:11:::2;:29;12240:16;;;;;;;;;-1:-1:-1::0;;;;;12240:16:143::2;12271:9;12295:168;;;;;;;;12359:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;12295:168:143::2;;;;;12401:9;;12295:168;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;;;12295:168:143;;;-1:-1:-1;12295:168:143::2;::::0;;::::2;::::0;;::::2;::::0;;;;;;;;;;;;;::::2;::::0;;;12438:7;;;;;;12295:168;::::2;::::0;12438:7;;12295:168;12438:7;12295:168;::::2;;::::0;::::2;::::0;;;;-1:-1:-1;;;12295:168:143;;-1:-1:-1;12196:278:143::2;::::0;-1:-1:-1;;;;;;12196:278:143::2;::::0;;;;;;::::2;::::0;;;;::::2;;;:::i;2580:287:20:-:0;1830:1;2712:7;;:19;2704:63;;;;-1:-1:-1;;;2704:63:20;;44239:2:174;2704:63:20;;;44221:21:174;44278:2;44258:18;;;44251:30;44317:33;44297:18;;;44290:61;44368:18;;2704:63:20;44037:355:174;2704:63:20;1830:1;2842:7;:18;2580:287::o;3672:97:143:-;3732:7;;3741:19;;;;;;;;;;;;-1:-1:-1;;;3741:19:143;;;;;-1:-1:-1;;;3732:7:143;;;;3731:8;3723:38;;;;-1:-1:-1;;;3723:38:143;;;;;;;;:::i;26576:410::-;26638:14;26669:30;26688:10;26669:18;:30::i;:::-;26665:314;;;-1:-1:-1;;;26874:14:143;26870:23;26857:37;26853:2;26849:46;26576:410;:::o;26665:314::-;-1:-1:-1;929:10:33;;26576:410:143:o;5577:213:130:-;5727:30;;;;;5710:72;;-1:-1:-1;;;5710:72:130;;-1:-1:-1;;;;;16140:32:174;;;5710:72:130;;;16122:51:174;;;;5683:7:130;;5727:30;;;;5710:66;;16095:18:174;;5710:72:130;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;4788:609::-;4912:27;;;;4873:7;;4912:27;;;;;5012:15;4992:36;;;4988:197;;-1:-1:-1;;5146:27:130;;;-1:-1:-1;;;5146:27:130;;-1:-1:-1;;;;;5146:27:130;;4788:609::o;4988:197::-;5322:27;;;;5255:33;;;;5197:17;;5217:143;;-1:-1:-1;;;;;;;;5322:27:130;;;;;;;5217:83;;5255:33;;5290:9;5217:37;:83::i;:::-;:90;;:143::i;3802:592::-;3928:27;;;;3889:7;;3928:27;;;;;4028:15;4008:36;;;4004:192;;-1:-1:-1;;4162:22:130;;;-1:-1:-1;;;;;4162:22:130;;3802:592::o;4004:192::-;4324:22;;;;4262:28;;;;4208:17;;4228:129;;-1:-1:-1;;;;;4324:22:130;;;;4228:74;;4262:28;4292:9;4228:33;:74::i;26415:153:143:-;26522:16;;:38;;;-1:-1:-1;;;26522:38:143;;;;26485:4;;-1:-1:-1;;;;;26522:16:143;;:36;;:38;;;;;;;;;;;;;;:16;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26509:51:143;:9;-1:-1:-1;;;;;26509:51:143;;26502:58;;26415:153;;;:::o;2721:200:133:-;2823:7;2845:71;2873:4;2879:19;2900:15;2845:27;:71::i;1291:126:135:-;1352:7;1379:30;524:4;1379:21;1391:8;:1;1397;1391:5;:8::i;:::-;571:7;577:1;524:4;571:7;:::i;:::-;1379:11;;:21::i;:::-;:25;;:30::i;565:303:133:-;663:7;;734:48;753:28;;;734:15;:48;:::i;:::-;709:73;-1:-1:-1;524:4:135;239:8:133;798:23;806:14;798:4;:23;:::i;:::-;797:44;;;;:::i;:::-;796:67;;;;:::i;1609:827::-;1753:7;;1813:49;1833:28;;;1813:16;:49;:::i;:::-;1799:63;;1873:3;1880:1;1873:8;1869:52;;524:4:135;1891:23:133;;;;;1869:52;1927:19;1949:7;1955:1;1949:3;:7;:::i;:::-;1927:29;;1963:19;1991:1;1985:3;:7;:21;;2005:1;1985:21;;;1995:7;2001:1;1995:3;:7;:::i;:::-;1963:43;-1:-1:-1;2013:21:133;2037:23;239:8;2037:4;:23;:::i;:::-;2013:47;-1:-1:-1;2067:20:133;2090:35;2013:47;;2090:20;:35::i;:::-;2067:58;-1:-1:-1;2131:22:133;2156:34;2067:58;2176:13;2156:19;:34::i;:::-;2131:59;-1:-1:-1;2197:18:133;2259:1;2242:12;2219:19;2226:11;2219:3;:19;:::i;:::-;:36;;;;:::i;:::-;2218:42;;;;:::i;:::-;2197:63;-1:-1:-1;2266:17:133;2345:1;2326:14;2310:11;2287:19;2294:11;2287:3;:19;:::i;:::-;:35;;;;:::i;:::-;:54;;;;:::i;:::-;2286:60;;;;:::i;:::-;2266:80;-1:-1:-1;2266:80:133;2406:10;2380:21;2397:3;2380:13;:21;:::i;:::-;2360:42;;524:4:135;2360:42:133;:::i;:::-;:57;;;;:::i;:::-;:71;;;;:::i;:::-;2353:78;1609:827;-1:-1:-1;;;;;;;;;;;;1609:827:133:o;3465:96:71:-;3523:7;3549:5;3553:1;3549;:5;:::i;2755:96::-;2813:7;2839:5;2843:1;2839;:5;:::i;3850:96::-;3908:7;3934:5;3938:1;3934;:5;:::i;14:286:174:-;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:174;;209:43;;199:71;;266:1;263;256:12;497:316;574:6;582;590;643:2;631:9;622:7;618:23;614:32;611:52;;;659:1;656;649:12;611:52;-1:-1:-1;;682:23:174;;;752:2;737:18;;724:32;;-1:-1:-1;803:2:174;788:18;;;775:32;;497:316;-1:-1:-1;497:316:174:o;1000:131::-;-1:-1:-1;;;;;1075:31:174;;1065:42;;1055:70;;1121:1;1118;1111:12;1136:134;1204:20;;1233:31;1204:20;1233:31;:::i;:::-;1136:134;;;:::o;1275:383::-;1352:6;1360;1368;1421:2;1409:9;1400:7;1396:23;1392:32;1389:52;;;1437:1;1434;1427:12;1389:52;1473:9;1460:23;1450:33;;1530:2;1519:9;1515:18;1502:32;1492:42;;1584:2;1573:9;1569:18;1556:32;1597:31;1622:5;1597:31;:::i;:::-;1647:5;1637:15;;;1275:383;;;;;:::o;1663:315::-;1731:6;1739;1792:2;1780:9;1771:7;1767:23;1763:32;1760:52;;;1808:1;1805;1798:12;1760:52;1844:9;1831:23;1821:33;;1904:2;1893:9;1889:18;1876:32;1917:31;1942:5;1917:31;:::i;:::-;1967:5;1957:15;;;1663:315;;;;;:::o;1983:127::-;2044:10;2039:3;2035:20;2032:1;2025:31;2075:4;2072:1;2065:15;2099:4;2096:1;2089:15;2115:718;2157:5;2210:3;2203:4;2195:6;2191:17;2187:27;2177:55;;2228:1;2225;2218:12;2177:55;2264:6;2251:20;2290:18;2327:2;2323;2320:10;2317:36;;;2333:18;;:::i;:::-;2408:2;2402:9;2376:2;2462:13;;-1:-1:-1;;2458:22:174;;;2482:2;2454:31;2450:40;2438:53;;;2506:18;;;2526:22;;;2503:46;2500:72;;;2552:18;;:::i;:::-;2592:10;2588:2;2581:22;2627:2;2619:6;2612:18;2673:3;2666:4;2661:2;2653:6;2649:15;2645:26;2642:35;2639:55;;;2690:1;2687;2680:12;2639:55;2754:2;2747:4;2739:6;2735:17;2728:4;2720:6;2716:17;2703:54;2801:1;2794:4;2789:2;2781:6;2777:15;2773:26;2766:37;2821:6;2812:15;;;;;;2115:718;;;;:::o;2838:665::-;2933:6;2941;2949;2957;3010:3;2998:9;2989:7;2985:23;2981:33;2978:53;;;3027:1;3024;3017:12;2978:53;3066:9;3053:23;3085:31;3110:5;3085:31;:::i;:::-;3135:5;-1:-1:-1;3192:2:174;3177:18;;3164:32;3205:33;3164:32;3205:33;:::i;:::-;3257:7;-1:-1:-1;3311:2:174;3296:18;;3283:32;;-1:-1:-1;3366:2:174;3351:18;;3338:32;3393:18;3382:30;;3379:50;;;3425:1;3422;3415:12;3379:50;3448:49;3489:7;3480:6;3469:9;3465:22;3448:49;:::i;:::-;3438:59;;;2838:665;;;;;;;:::o;3715:159::-;3782:20;;3842:6;3831:18;;3821:29;;3811:57;;3864:1;3861;3854:12;3879:456;3964:6;3972;3980;3988;4041:3;4029:9;4020:7;4016:23;4012:33;4009:53;;;4058:1;4055;4048:12;4009:53;4094:9;4081:23;4071:33;;4151:2;4140:9;4136:18;4123:32;4113:42;;4205:2;4194:9;4190:18;4177:32;4218:31;4243:5;4218:31;:::i;:::-;4268:5;-1:-1:-1;4292:37:174;4325:2;4310:18;;4292:37;:::i;:::-;4282:47;;3879:456;;;;;;;:::o;4340:367::-;4403:8;4413:6;4467:3;4460:4;4452:6;4448:17;4444:27;4434:55;;4485:1;4482;4475:12;4434:55;-1:-1:-1;4508:20:174;;4551:18;4540:30;;4537:50;;;4583:1;4580;4573:12;4537:50;4620:4;4612:6;4608:17;4596:29;;4680:3;4673:4;4663:6;4660:1;4656:14;4648:6;4644:27;4640:38;4637:47;4634:67;;;4697:1;4694;4687:12;4634:67;4340:367;;;;;:::o;4712:1404::-;4906:6;4914;4922;4930;4938;4946;4954;4962;5015:3;5003:9;4994:7;4990:23;4986:33;4983:53;;;5032:1;5029;5022:12;4983:53;5072:9;5059:23;5101:18;5142:2;5134:6;5131:14;5128:34;;;5158:1;5155;5148:12;5128:34;5197:70;5259:7;5250:6;5239:9;5235:22;5197:70;:::i;:::-;5286:8;;-1:-1:-1;5171:96:174;-1:-1:-1;5374:2:174;5359:18;;5346:32;;-1:-1:-1;5390:16:174;;;5387:36;;;5419:1;5416;5409:12;5387:36;5458:72;5522:7;5511:8;5500:9;5496:24;5458:72;:::i;:::-;5549:8;;-1:-1:-1;5432:98:174;-1:-1:-1;5637:2:174;5622:18;;5609:32;;-1:-1:-1;5653:16:174;;;5650:36;;;5682:1;5679;5672:12;5650:36;5721:72;5785:7;5774:8;5763:9;5759:24;5721:72;:::i;:::-;5812:8;;-1:-1:-1;5695:98:174;-1:-1:-1;5900:2:174;5885:18;;5872:32;;-1:-1:-1;5916:16:174;;;5913:36;;;5945:1;5942;5935:12;5913:36;;5984:72;6048:7;6037:8;6026:9;6022:24;5984:72;:::i;:::-;4712:1404;;;;-1:-1:-1;4712:1404:174;;-1:-1:-1;4712:1404:174;;;;;;6075:8;-1:-1:-1;;;4712:1404:174:o;6121:248::-;6189:6;6197;6250:2;6238:9;6229:7;6225:23;6221:32;6218:52;;;6266:1;6263;6256:12;6218:52;-1:-1:-1;;6289:23:174;;;6359:2;6344:18;;;6331:32;;-1:-1:-1;6121:248:174:o;6483:658::-;6654:2;6706:21;;;6776:13;;6679:18;;;6798:22;;;6625:4;;6654:2;6877:15;;;;6851:2;6836:18;;;6625:4;6920:195;6934:6;6931:1;6928:13;6920:195;;;6999:13;;-1:-1:-1;;;;;6995:39:174;6983:52;;7090:15;;;;7055:12;;;;7031:1;6949:9;6920:195;;;-1:-1:-1;7132:3:174;;6483:658;-1:-1:-1;;;;;;6483:658:174:o;7146:773::-;7268:6;7276;7284;7292;7345:2;7333:9;7324:7;7320:23;7316:32;7313:52;;;7361:1;7358;7351:12;7313:52;7401:9;7388:23;7430:18;7471:2;7463:6;7460:14;7457:34;;;7487:1;7484;7477:12;7457:34;7526:70;7588:7;7579:6;7568:9;7564:22;7526:70;:::i;:::-;7615:8;;-1:-1:-1;7500:96:174;-1:-1:-1;7703:2:174;7688:18;;7675:32;;-1:-1:-1;7719:16:174;;;7716:36;;;7748:1;7745;7738:12;7716:36;;7787:72;7851:7;7840:8;7829:9;7825:24;7787:72;:::i;:::-;7146:773;;;;-1:-1:-1;7878:8:174;-1:-1:-1;;;;7146:773:174:o;7924:815::-;8047:6;8055;8063;8071;8124:3;8112:9;8103:7;8099:23;8095:33;8092:53;;;8141:1;8138;8131:12;8092:53;8181:9;8168:23;8214:18;8206:6;8203:30;8200:50;;;8246:1;8243;8236:12;8200:50;8269:22;;8325:3;8307:16;;;8303:26;8300:46;;;8342:1;8339;8332:12;8300:46;8365:2;-1:-1:-1;8417:2:174;8402:18;;8389:32;8430:31;8389:32;8430:31;:::i;:::-;8480:5;-1:-1:-1;8537:2:174;8522:18;;8509:32;8550:33;8509:32;8550:33;:::i;:::-;8602:7;-1:-1:-1;8661:2:174;8646:18;;8633:32;8674:33;8633:32;8674:33;:::i;:::-;7924:815;;;;-1:-1:-1;7924:815:174;;-1:-1:-1;;7924:815:174:o;10152:525::-;10238:6;10246;10254;10262;10315:3;10303:9;10294:7;10290:23;10286:33;10283:53;;;10332:1;10329;10322:12;10283:53;10371:9;10358:23;10390:31;10415:5;10390:31;:::i;:::-;10440:5;-1:-1:-1;10497:2:174;10482:18;;10469:32;10510:33;10469:32;10510:33;:::i;:::-;10152:525;;10562:7;;-1:-1:-1;;;;10616:2:174;10601:18;;10588:32;;10667:2;10652:18;10639:32;;10152:525::o;10682:1088::-;10840:6;10848;10856;10864;10872;10880;10933:2;10921:9;10912:7;10908:23;10904:32;10901:52;;;10949:1;10946;10939:12;10901:52;10989:9;10976:23;11018:18;11059:2;11051:6;11048:14;11045:34;;;11075:1;11072;11065:12;11045:34;11114:70;11176:7;11167:6;11156:9;11152:22;11114:70;:::i;:::-;11203:8;;-1:-1:-1;11088:96:174;-1:-1:-1;11291:2:174;11276:18;;11263:32;;-1:-1:-1;11307:16:174;;;11304:36;;;11336:1;11333;11326:12;11304:36;11375:72;11439:7;11428:8;11417:9;11413:24;11375:72;:::i;:::-;11466:8;;-1:-1:-1;11349:98:174;-1:-1:-1;11554:2:174;11539:18;;11526:32;;-1:-1:-1;11570:16:174;;;11567:36;;;11599:1;11596;11589:12;11567:36;;11638:72;11702:7;11691:8;11680:9;11676:24;11638:72;:::i;:::-;10682:1088;;;;-1:-1:-1;10682:1088:174;;-1:-1:-1;10682:1088:174;;11729:8;;10682:1088;-1:-1:-1;;;10682:1088:174:o;11775:663::-;11879:6;11887;11895;11903;11911;11919;11972:3;11960:9;11951:7;11947:23;11943:33;11940:53;;;11989:1;11986;11979:12;11940:53;12025:9;12012:23;12002:33;;12085:2;12074:9;12070:18;12057:32;12098:31;12123:5;12098:31;:::i;:::-;12148:5;-1:-1:-1;12205:2:174;12190:18;;12177:32;12218:33;12177:32;12218:33;:::i;:::-;11775:663;;;;-1:-1:-1;12270:7:174;;12324:2;12309:18;;12296:32;;-1:-1:-1;12375:3:174;12360:19;;12347:33;;12427:3;12412:19;;;12399:33;;-1:-1:-1;11775:663:174;-1:-1:-1;;11775:663:174:o;12443:180::-;12502:6;12555:2;12543:9;12534:7;12530:23;12526:32;12523:52;;;12571:1;12568;12561:12;12523:52;-1:-1:-1;12594:23:174;;12443:180;-1:-1:-1;12443:180:174:o;12729:423::-;12771:3;12809:5;12803:12;12836:6;12831:3;12824:19;12861:1;12871:162;12885:6;12882:1;12879:13;12871:162;;;12947:4;13003:13;;;12999:22;;12993:29;12975:11;;;12971:20;;12964:59;12900:12;12871:162;;;12875:3;13078:1;13071:4;13062:6;13057:3;13053:16;13049:27;13042:38;13141:4;13134:2;13130:7;13125:2;13117:6;13113:15;13109:29;13104:3;13100:39;13096:50;13089:57;;;12729:423;;;;:::o;13382:2308::-;13563:2;13552:9;13545:21;13575:76;13647:2;13636:9;13632:18;13623:6;13617:13;12709:12;12697:25;;12628:96;13575:76;13526:4;13698:2;13690:6;13686:15;13680:22;13711:52;13759:2;13748:9;13744:18;13730:12;-1:-1:-1;;;;;6440:31:174;6428:44;;6374:104;13711:52;-1:-1:-1;13812:2:174;13800:15;;13794:22;-1:-1:-1;;;;;6440:31:174;;13875:2;13860:18;;6428:44;-1:-1:-1;13928:2:174;13916:15;;13910:22;-1:-1:-1;;;;;6440:31:174;;13991:3;13976:19;;6428:44;-1:-1:-1;14045:3:174;14033:16;;14027:23;-1:-1:-1;;;;;6440:31:174;;14109:3;14094:19;;6428:44;-1:-1:-1;14163:3:174;14151:16;;14145:23;-1:-1:-1;;;;;6440:31:174;;14227:3;14212:19;;6428:44;-1:-1:-1;14281:3:174;14269:16;;14263:23;-1:-1:-1;;;;;6440:31:174;;14345:3;14330:19;;6428:44;14295:55;14399:3;14391:6;14387:16;14381:23;14423:6;14448:3;14487:2;14482;14471:9;14467:18;14460:30;14513:54;14562:3;14551:9;14547:19;14531:14;14513:54;:::i;:::-;14592:15;;;14586:22;14627:3;14646:18;;;14639:30;;;;14694:15;;14688:22;14729:3;14748:18;;;14741:30;;;;14796:15;;14790:22;14831:3;14850:18;;;14843:30;;;;14898:15;;14892:22;14934:3;14953:19;;;14946:31;;;;15014:16;;15008:23;14499:68;;-1:-1:-1;15051:3:174;15063:55;15098:19;;;15008:23;-1:-1:-1;;;;;13223:46:174;13211:59;;13157:119;15063:55;15155:16;;15149:23;;-1:-1:-1;15192:3:174;15204:55;15239:19;;;15149:23;-1:-1:-1;;;;;13223:46:174;13211:59;;13157:119;15204:55;15296:16;;15290:23;;-1:-1:-1;15333:3:174;15345:55;15380:19;;;15290:23;-1:-1:-1;;;;;13223:46:174;13211:59;;13157:119;15345:55;15438:16;;15432:23;;-1:-1:-1;15475:3:174;15487:56;15523:19;;;15432:23;-1:-1:-1;;;;;13223:46:174;13211:59;;13157:119;15487:56;15581:16;;;15575:23;13357:12;13346:24;15642:18;;13334:37;;;;-1:-1:-1;15678:6:174;;-1:-1:-1;13382:2308:174:o;16620:663::-;16732:6;16740;16748;16756;16764;16772;16780;16833:3;16821:9;16812:7;16808:23;16804:33;16801:53;;;16850:1;16847;16840:12;16801:53;16886:9;16873:23;16863:33;;16943:2;16932:9;16928:18;16915:32;16905:42;;16994:2;16983:9;16979:18;16966:32;16956:42;;17045:2;17034:9;17030:18;17017:32;17007:42;;17096:3;17085:9;17081:19;17068:33;17058:43;;17151:3;17140:9;17136:19;17123:33;17165:31;17190:5;17165:31;:::i;:::-;17215:5;-1:-1:-1;17239:38:174;17272:3;17257:19;;17239:38;:::i;:::-;17229:48;;16620:663;;;;;;;;;;:::o;18381:525::-;18467:6;18475;18483;18491;18544:3;18532:9;18523:7;18519:23;18515:33;18512:53;;;18561:1;18558;18551:12;18512:53;18600:9;18587:23;18619:31;18644:5;18619:31;:::i;:::-;18669:5;-1:-1:-1;18721:2:174;18706:18;;18693:32;;-1:-1:-1;18772:2:174;18757:18;;18744:32;;-1:-1:-1;18828:2:174;18813:18;;18800:32;18841:33;18800:32;18841:33;:::i;18911:1499::-;19071:6;19079;19087;19095;19103;19111;19119;19127;19180:3;19168:9;19159:7;19155:23;19151:33;19148:53;;;19197:1;19194;19187:12;19148:53;19236:9;19223:23;19255:31;19280:5;19255:31;:::i;:::-;19305:5;-1:-1:-1;19362:2:174;19347:18;;19334:32;19375:33;19334:32;19375:33;:::i;:::-;19427:7;-1:-1:-1;19485:2:174;19470:18;;19457:32;19508:18;19538:14;;;19535:34;;;19565:1;19562;19555:12;19535:34;19604:70;19666:7;19657:6;19646:9;19642:22;19604:70;:::i;:::-;19693:8;;-1:-1:-1;19578:96:174;-1:-1:-1;19781:2:174;19766:18;;19753:32;;-1:-1:-1;19797:16:174;;;19794:36;;;19826:1;19823;19816:12;19794:36;19865:72;19929:7;19918:8;19907:9;19903:24;19865:72;:::i;:::-;19956:8;;-1:-1:-1;19839:98:174;-1:-1:-1;20044:3:174;20029:19;;20016:33;;-1:-1:-1;20061:16:174;;;20058:36;;;20090:1;20087;20080:12;20058:36;20128:8;20117:9;20113:24;20103:34;;20175:7;20168:4;20164:2;20160:13;20156:27;20146:55;;20197:1;20194;20187:12;20146:55;20237:2;20224:16;20263:2;20255:6;20252:14;20249:34;;;20279:1;20276;20269:12;20249:34;20324:7;20319:2;20310:6;20306:2;20302:15;20298:24;20295:37;20292:57;;;20345:1;20342;20335:12;20292:57;20376:2;20372;20368:11;20358:21;;20398:6;20388:16;;;;;18911:1499;;;;;;;;;;;:::o;20415:273::-;20471:6;20524:2;20512:9;20503:7;20499:23;20495:32;20492:52;;;20540:1;20537;20530:12;20492:52;20579:9;20566:23;20632:5;20625:13;20618:21;20611:5;20608:32;20598:60;;20654:1;20651;20644:12;20693:1584;20913:6;20921;20929;20937;20945;20953;20961;20969;20977;20985;20993:7;21047:3;21035:9;21026:7;21022:23;21018:33;21015:53;;;21064:1;21061;21054:12;21015:53;21087:18;21145:2;21133:9;21120:23;21117:31;21114:51;;;21161:1;21158;21151:12;21114:51;21200:87;21279:7;21266:9;21253:23;21242:9;21238:39;21200:87;:::i;:::-;21306:8;;-1:-1:-1;21333:8:174;-1:-1:-1;21384:2:174;21369:18;;21356:32;21353:40;-1:-1:-1;21350:60:174;;;21406:1;21403;21396:12;21350:60;21445:96;21533:7;21526:2;21515:9;21511:18;21498:32;21487:9;21483:48;21445:96;:::i;:::-;21560:8;;-1:-1:-1;21587:8:174;-1:-1:-1;21638:2:174;21623:18;;21610:32;21607:40;-1:-1:-1;21604:60:174;;;21660:1;21657;21650:12;21604:60;21699:96;21787:7;21780:2;21769:9;21765:18;21752:32;21741:9;21737:48;21699:96;:::i;:::-;21814:8;;-1:-1:-1;21841:8:174;-1:-1:-1;21892:2:174;21877:18;;21864:32;21861:40;-1:-1:-1;21858:60:174;;;21914:1;21911;21904:12;21858:60;;21953:96;22041:7;22034:2;22023:9;22019:18;22006:32;21995:9;21991:48;21953:96;:::i;:::-;22068:8;;-1:-1:-1;22095:8:174;-1:-1:-1;22150:3:174;22135:19;;22122:33;;-1:-1:-1;22174:39:174;22208:3;22193:19;;22174:39;:::i;:::-;22164:49;;22233:38;22266:3;22255:9;22251:19;22233:38;:::i;:::-;22222:49;;20693:1584;;;;;;;;;;;;;;:::o;22606:247::-;22665:6;22718:2;22706:9;22697:7;22693:23;22689:32;22686:52;;;22734:1;22731;22724:12;22686:52;22773:9;22760:23;22792:31;22817:5;22792:31;:::i;22858:632::-;23029:2;23081:21;;;23151:13;;23054:18;;;23173:22;;;23000:4;;23029:2;23252:15;;;;23226:2;23211:18;;;23000:4;23295:169;23309:6;23306:1;23303:13;23295:169;;;23370:13;;23358:26;;23439:15;;;;23404:12;;;;23331:1;23324:9;23295:169;;23768:734;23872:6;23880;23888;23896;23904;23957:3;23945:9;23936:7;23932:23;23928:33;23925:53;;;23974:1;23971;23964:12;23925:53;24013:9;24000:23;24032:31;24057:5;24032:31;:::i;:::-;24082:5;-1:-1:-1;24139:2:174;24124:18;;24111:32;24152:33;24111:32;24152:33;:::i;:::-;24204:7;-1:-1:-1;24258:2:174;24243:18;;24230:32;;-1:-1:-1;24309:2:174;24294:18;;24281:32;;-1:-1:-1;24364:3:174;24349:19;;24336:33;24392:18;24381:30;;24378:50;;;24424:1;24421;24414:12;24378:50;24447:49;24488:7;24479:6;24468:9;24464:22;24447:49;:::i;:::-;24437:59;;;23768:734;;;;;;;;:::o;27557:251::-;27627:6;27680:2;27668:9;27659:7;27655:23;27651:32;27648:52;;;27696:1;27693;27686:12;27648:52;27728:9;27722:16;27747:31;27772:5;27747:31;:::i;27813:325::-;28015:2;27997:21;;;28054:1;28034:18;;;28027:29;-1:-1:-1;;;28087:2:174;28072:18;;28065:32;28129:2;28114:18;;27813:325::o;29048:461::-;29101:3;29139:5;29133:12;29166:6;29161:3;29154:19;29192:4;29221:2;29216:3;29212:12;29205:19;;29258:2;29251:5;29247:14;29279:1;29289:195;29303:6;29300:1;29297:13;29289:195;;;29368:13;;-1:-1:-1;;;;;29364:39:174;29352:52;;29424:12;;;;29459:15;;;;29400:1;29318:9;29289:195;;;-1:-1:-1;29500:3:174;;29048:461;-1:-1:-1;;;;;29048:461:174:o;29514:435::-;29567:3;29605:5;29599:12;29632:6;29627:3;29620:19;29658:4;29687:2;29682:3;29678:12;29671:19;;29724:2;29717:5;29713:14;29745:1;29755:169;29769:6;29766:1;29763:13;29755:169;;;29830:13;;29818:26;;29864:12;;;;29899:15;;;;29791:1;29784:9;29755:169;;29954:1340;30264:4;30310:1;30306;30301:3;30297:11;30293:19;30351:2;30343:6;30339:15;30328:9;30321:34;30391:6;30386:2;30375:9;30371:18;30364:34;30434:2;30429;30418:9;30414:18;30407:30;30492:2;30483:6;30477:13;30473:22;30468:2;30457:9;30453:18;30446:50;;30543:2;30535:6;30531:15;30525:22;30584:4;30578:3;30567:9;30563:19;30556:33;30612:63;30670:3;30659:9;30655:19;30641:12;30612:63;:::i;:::-;30598:77;;30724:2;30716:6;30712:15;30706:22;30751:2;30747:7;30820:2;30808:9;30800:6;30796:22;30792:31;30785:4;30774:9;30770:20;30763:61;30847:52;30892:6;30876:14;30847:52;:::i;:::-;30833:66;;30948:2;30940:6;30936:15;30930:22;30908:44;;31017:2;31005:9;30997:6;30993:22;30989:31;30983:3;30972:9;30968:19;30961:60;31044:52;31089:6;31073:14;31044:52;:::i;:::-;31030:66;;31145:3;31137:6;31133:16;31127:23;31105:45;;31215:2;31203:9;31195:6;31191:22;31187:31;31181:3;31170:9;31166:19;31159:60;;31236:52;31281:6;31265:14;31236:52;:::i;:::-;31228:60;29954:1340;-1:-1:-1;;;;;;;29954:1340:174:o;31299:929::-;31617:4;31663:1;31659;31654:3;31650:11;31646:19;31704:2;31696:6;31692:15;31681:9;31674:34;31744:6;31739:2;31728:9;31724:18;31717:34;31787:2;31782;31771:9;31767:18;31760:30;31845:2;31836:6;31830:13;31826:22;31821:2;31810:9;31806:18;31799:50;;31896:2;31888:6;31884:15;31878:22;31937:2;31931:3;31920:9;31916:19;31909:31;31963:63;32021:3;32010:9;32006:19;31992:12;31963:63;:::i;:::-;31949:77;;32075:2;32067:6;32063:15;32057:22;32148:2;32144:7;32132:9;32124:6;32120:22;32116:36;32110:3;32099:9;32095:19;32088:65;32170:52;32215:6;32199:14;32170:52;:::i;32233:1708::-;32551:4;32597:1;32593;32588:3;32584:11;32580:19;32638:2;32630:6;32626:15;32615:9;32608:34;32661:2;32699:6;32694:2;32683:9;32679:18;32672:34;32742:2;32737;32726:9;32722:18;32715:30;32800:2;32791:6;32785:13;32781:22;32776:2;32765:9;32761:18;32754:50;32851:2;32843:6;32839:15;32833:22;32813:42;;32892:4;32886:3;32875:9;32871:19;32864:33;32920:63;32978:3;32967:9;32963:19;32949:12;32920:63;:::i;:::-;32906:77;;33032:2;33024:6;33020:15;33014:22;33059:2;33055:7;33128:2;33116:9;33108:6;33104:22;33100:31;33093:4;33082:9;33078:20;33071:61;33155:52;33200:6;33184:14;33155:52;:::i;:::-;33141:66;;33256:2;33248:6;33244:15;33238:22;33216:44;;33325:2;33313:9;33305:6;33301:22;33297:31;33291:3;33280:9;33276:19;33269:60;33352:52;33397:6;33381:14;33352:52;:::i;:::-;33453:3;33441:16;;33435:23;33499:22;;;33495:31;;;33489:3;33474:19;;33467:60;33576:21;;33606:22;;;33682:23;;;;-1:-1:-1;33723:1:174;;-1:-1:-1;33644:15:174;;;33733:182;33747:6;33744:1;33741:13;33733:182;;;33812:13;;33827:6;33808:26;33796:39;;33890:15;;;;33769:1;33762:9;;;;;33855:12;;;;33733:182;;;-1:-1:-1;33932:3:174;32233:1708;-1:-1:-1;;;;;;;;32233:1708:174:o;33946:127::-;34007:10;34002:3;33998:20;33995:1;33988:31;34038:4;34035:1;34028:15;34062:4;34059:1;34052:15;34078:125;34143:9;;;34164:10;;;34161:36;;;34177:18;;:::i;34208:1154::-;34530:4;34576:1;34572;34567:3;34563:11;34559:19;34617:2;34609:6;34605:15;34594:9;34587:34;34657:6;34652:2;34641:9;34637:18;34630:34;34700:2;34695;34684:9;34680:18;34673:30;34758:2;34749:6;34743:13;34739:22;34734:2;34723:9;34719:18;34712:50;;34809:2;34801:6;34797:15;34791:22;34851:4;34844;34833:9;34829:20;34822:34;34879:63;34937:3;34926:9;34922:19;34908:12;34879:63;:::i;:::-;34865:77;;34991:2;34983:6;34979:15;34973:22;35018:2;35014:7;35086:2;35074:9;35066:6;35062:22;35058:31;35052:3;35041:9;35037:19;35030:60;35113:52;35158:6;35142:14;35113:52;:::i;:::-;35099:66;;35214:2;35206:6;35202:15;35196:22;35174:44;;35283:2;35271:9;35263:6;35259:22;35255:31;35249:3;35238:9;35234:19;35227:60;;35304:52;35349:6;35333:14;35304:52;:::i;35367:220::-;35516:2;35505:9;35498:21;35479:4;35536:45;35577:2;35566:9;35562:18;35554:6;35536:45;:::i;35592:380::-;35671:1;35667:12;;;;35714;;;35735:61;;35789:4;35781:6;35777:17;35767:27;;35735:61;35842:2;35834:6;35831:14;35811:18;35808:38;35805:161;;35888:10;35883:3;35879:20;35876:1;35869:31;35923:4;35920:1;35913:15;35951:4;35948:1;35941:15;35805:161;;35592:380;;;:::o;36968:1024::-;37271:6;37260:9;37253:25;37314:2;37309;37298:9;37294:18;37287:30;37389:1;37385;37380:3;37376:11;37372:19;37363:6;37357:13;37353:39;37348:2;37337:9;37333:18;37326:67;37234:4;37440:2;37432:6;37428:15;37422:22;37480:4;37475:2;37464:9;37460:18;37453:32;37508:63;37566:3;37555:9;37551:19;37537:12;37508:63;:::i;:::-;37494:77;;37620:2;37612:6;37608:15;37602:22;37647:2;37643:7;37716:2;37704:9;37696:6;37692:22;37688:31;37681:4;37670:9;37666:20;37659:61;37743:52;37788:6;37772:14;37743:52;:::i;:::-;37729:66;;37844:2;37836:6;37832:15;37826:22;37804:44;;37913:2;37901:9;37893:6;37889:22;37885:31;37879:3;37868:9;37864:19;37857:60;;37934:52;37979:6;37963:14;37934:52;:::i;:::-;37926:60;36968:1024;-1:-1:-1;;;;;;36968:1024:174:o;39003:128::-;39070:9;;;39091:11;;;39088:37;;;39105:18;;:::i;39136:1674::-;39518:1;39514;39509:3;39505:11;39501:19;39493:6;39489:32;39478:9;39471:51;39558:6;39553:2;39542:9;39538:18;39531:34;39601:2;39596;39585:9;39581:18;39574:30;39613:53;39662:2;39651:9;39647:18;39638:6;39632:13;-1:-1:-1;;;;;6440:31:174;6428:44;;6374:104;39613:53;39452:4;39713:2;39705:6;39701:15;39695:22;39736:6;39779:2;39773:3;39762:9;39758:19;39751:31;39805:63;39863:3;39852:9;39848:19;39834:12;39805:63;:::i;:::-;39791:77;;39917:2;39909:6;39905:15;39899:22;39944:2;39940:7;40012:2;40000:9;39992:6;39988:22;39984:31;39978:3;39967:9;39963:19;39956:60;40039:52;40084:6;40068:14;40039:52;:::i;:::-;40025:66;;40140:2;40132:6;40128:15;40122:22;40100:44;;40209:2;40197:9;40189:6;40185:22;40181:31;40175:3;40164:9;40160:19;40153:60;40236:52;40281:6;40265:14;40236:52;:::i;:::-;40222:66;;40337:3;40329:6;40325:16;40319:23;40297:45;;40407:2;40395:9;40387:6;40383:22;40379:31;40373:3;40362:9;40358:19;40351:60;;40434:52;40479:6;40463:14;40434:52;:::i;:::-;40420:66;;;40540:3;40532:6;40528:16;40522:23;40517:2;40506:9;40502:18;40495:51;;40595:3;40587:6;40583:16;40577:23;40609:55;40659:3;40648:9;40644:19;40628:14;-1:-1:-1;;;;;6440:31:174;6428:44;;6374:104;40609:55;-1:-1:-1;40713:3:174;40701:16;;40695:23;28219:6;28208:18;;40776:3;40761:19;;28196:31;-1:-1:-1;40798:6:174;39136:1674;-1:-1:-1;;;;;39136:1674:174:o;41247:306::-;41335:6;41343;41351;41404:2;41392:9;41383:7;41379:23;41375:32;41372:52;;;41420:1;41417;41410:12;41372:52;41449:9;41443:16;41433:26;;41499:2;41488:9;41484:18;41478:25;41468:35;;41543:2;41532:9;41528:18;41522:25;41512:35;;41247:306;;;;;:::o;42172:127::-;42233:10;42228:3;42224:20;42221:1;42214:31;42264:4;42261:1;42254:15;42288:4;42285:1;42278:15;42304:135;42343:3;42364:17;;;42361:43;;42384:18;;:::i;:::-;-1:-1:-1;42431:1:174;42420:13;;42304:135::o;43107:925::-;43421:4;43467:1;43463;43458:3;43454:11;43450:19;43508:2;43500:6;43496:15;43485:9;43478:34;43548:6;43543:2;43532:9;43528:18;43521:34;43591:2;43586;43575:9;43571:18;43564:30;43649:2;43640:6;43634:13;43630:22;43625:2;43614:9;43610:18;43603:50;;43700:2;43692:6;43688:15;43682:22;43741:2;43735:3;43724:9;43720:19;43713:31;43767:63;43825:3;43814:9;43810:19;43796:12;43767:63;:::i;:::-;43753:77;;43879:2;43871:6;43867:15;43861:22;43952:2;43948:7;43936:9;43928:6;43924:22;43920:36;43914:3;43903:9;43899:19;43892:65;43974:52;44019:6;44003:14;43974:52;:::i;44397:184::-;44467:6;44520:2;44508:9;44499:7;44495:23;44491:32;44488:52;;;44536:1;44533;44526:12;44488:52;-1:-1:-1;44559:16:174;;44397:184;-1:-1:-1;44397:184:174:o;44586:217::-;44626:1;44652;44642:132;;44696:10;44691:3;44687:20;44684:1;44677:31;44731:4;44728:1;44721:15;44759:4;44756:1;44749:15;44642:132;-1:-1:-1;44788:9:174;;44586:217::o;44808:168::-;44848:7;44914:1;44910;44906:6;44902:14;44899:1;44896:21;44891:1;44884:9;44877:17;44873:45;44870:71;;;44921:18;;:::i;:::-;-1:-1:-1;44961:9:174;;44808:168::o",
    "linkReferences": {
      "src/protocol/libraries/logic/BorrowLogic.sol": {
        "BorrowLogic": [
          {
            "start": 1947,
            "length": 20
          },
          {
            "start": 4894,
            "length": 20
          },
          {
            "start": 6319,
            "length": 20
          },
          {
            "start": 8145,
            "length": 20
          },
          {
            "start": 9085,
            "length": 20
          },
          {
            "start": 9528,
            "length": 20
          }
        ]
      },
      "src/protocol/libraries/logic/LiquidateLogic.sol": {
        "LiquidateLogic": [
          {
            "start": 2376,
            "length": 20
          },
          {
            "start": 3151,
            "length": 20
          },
          {
            "start": 3949,
            "length": 20
          },
          {
            "start": 6924,
            "length": 20
          },
          {
            "start": 8317,
            "length": 20
          }
        ]
      },
      "src/protocol/libraries/logic/SupplyLogic.sol": {
        "SupplyLogic": [
          {
            "start": 2205,
            "length": 20
          },
          {
            "start": 2867,
            "length": 20
          },
          {
            "start": 4464,
            "length": 20
          },
          {
            "start": 6648,
            "length": 20
          }
        ]
      }
    }
  },
  "methodIdentifiers": {
    "auction(uint256,address)": "118cfad3",
    "batchAuction(uint256[],address[])": "34e69b62",
    "batchBid(address[],uint256[],uint256[],address[])": "2684dd09",
    "batchBorrow(uint256[],uint256[],uint256[],uint256[],uint256,address,uint16)": "c28cadf7",
    "batchDeposit(uint256[],uint256[],address[],uint16[])": "4b33a967",
    "batchRefinance(uint256[],uint256[],uint256[])": "621759de",
    "batchRepay(uint256[],uint256[])": "ff7039c7",
    "batchWithdraw(uint256[],uint256[],address[])": "9e97a156",
    "bid(address,uint256,uint256,address)": "a7ff3b23",
    "borrow(uint256,uint256,uint256,uint256,uint256,address,uint16)": "9c74daf8",
    "deposit(uint256,uint256,address,uint16)": "1de8a7c2",
    "executionDelegate()": "986c9b20",
    "finalizeTransfer(uint256,address,address,uint256,uint256,uint256)": "6c130dc7",
    "getAddressProvider()": "f8c68934",
    "getAuctionConfiguration(uint256)": "a58497a5",
    "getBorrowHealthFactor(uint256)": "c46a90f5",
    "getInitializedAssets()": "3b4ecdb2",
    "getInitializedCollaterals()": "31e884bb",
    "getMaxNumberOfReserves()": "08ac08b9",
    "getPausedTime()": "8fc42188",
    "getReserve(uint256)": "77778db3",
    "getReserveConfiguration(uint256)": "eadff055",
    "getReserveFlags(uint256)": "993ff816",
    "getReserveId(address,address,uint256,uint256)": "52120e23",
    "getReserveNormalizedIncome(uint256)": "dcc5cded",
    "getReserveNormalizedVariableDebt(uint256)": "9034c18c",
    "getReserveUserStableRate(uint256,address)": "2e4e8eb4",
    "getReservesList()": "d1946dbc",
    "initReserve((address,string,string,uint256,uint256,address,string,string,uint8,address,string,string,address,string,string,address,string,string,address,uint256,address,address,uint256,uint256,uint256,string),address,address,address)": "45a64925",
    "initialize(address)": "c4d66de8",
    "onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)": "bc197c81",
    "onERC1155Received(address,address,uint256,uint256,bytes)": "f23a6e61",
    "onERC721Received(address,address,uint256,bytes)": "150b7a02",
    "paused()": "5c975abb",
    "refinance(uint256,uint256,uint256)": "044df1f2",
    "repay(uint256,uint256)": "d8aed145",
    "setMaxNumberOfReserves(uint256)": "746c35a2",
    "setPause(bool)": "bedb86fb",
    "setPausedTime(uint256,uint256)": "2f923ff7",
    "setReserveConfiguration(uint256,uint256)": "89a7245d",
    "setReserveCreatorAddress(uint256,address)": "bbce5cf3",
    "setReserveCreatorPercentage(uint256,uint256)": "e49c8a52",
    "setReserveInterestRateAddress(uint256,address)": "19322775",
    "setReserveMaxSupply(uint256,uint256)": "d6ee0f73",
    "supportsInterface(bytes4)": "01ffc9a7",
    "withdraw(uint256,uint256,address)": "0ad58d2f"
  },
  "rawMetadata": "{\"compiler\":{\"version\":\"0.8.16+commit.07a7930e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"borrowRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"borrowId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referral\",\"type\":\"uint16\"}],\"name\":\"Borrow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referalCode\",\"type\":\"uint16\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"borrowId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"paymentAsset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"paymentAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"}],\"name\":\"Liquidate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"durationTime\",\"type\":\"uint256\"}],\"name\":\"PausedTimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"borrowId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountAdded\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountTaken\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"defaultFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"Refinanced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"borrowId\",\"type\":\"uint256\"}],\"name\":\"Repay\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"borrowId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"}],\"name\":\"auction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"borrowIds\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"onBehalfOfs\",\"type\":\"address[]\"}],\"name\":\"batchAuction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"borrowIds\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"onBehalfOfs\",\"type\":\"address[]\"}],\"name\":\"batchBid\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenValues\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"reserveIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"batchBorrow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"reserveIds\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"onBehalfOfs\",\"type\":\"address[]\"},{\"internalType\":\"uint16[]\",\"name\":\"referralCodes\",\"type\":\"uint16[]\"}],\"name\":\"batchDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"borrowIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"durations\",\"type\":\"uint256[]\"}],\"name\":\"batchRefinance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"borrowIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"batchRepay\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"reserveIds\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"tos\",\"type\":\"address[]\"}],\"name\":\"batchWithdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"}],\"name\":\"bid\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"borrow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"executionDelegate\",\"outputs\":[{\"internalType\":\"contract IExecutionDelegate\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balanceFromBefore\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balanceToBefore\",\"type\":\"uint256\"}],\"name\":\"finalizeTransfer\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAddressProvider\",\"outputs\":[{\"internalType\":\"contract IAddressProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"}],\"name\":\"getAuctionConfiguration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"borrowId\",\"type\":\"uint256\"}],\"name\":\"getBorrowHealthFactor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getInitializedAssets\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getInitializedCollaterals\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxNumberOfReserves\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPausedTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"}],\"name\":\"getReserve\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"data\",\"type\":\"uint256\"}],\"internalType\":\"struct DataTypes.ReserveConfigurationMap\",\"name\":\"configuration\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"fTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"stableDebtTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"variableDebtTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"interestRateAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"assetPriceFeed\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxTokenSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxTokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minTokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"liquidityIndex\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"variableBorrowIndex\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"currentLiquidityRate\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"currentVariableBorrowRate\",\"type\":\"uint128\"},{\"internalType\":\"uint40\",\"name\":\"lastUpdateTimestamp\",\"type\":\"uint40\"}],\"internalType\":\"struct DataTypes.Reserve\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"}],\"name\":\"getReserveConfiguration\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"data\",\"type\":\"uint256\"}],\"internalType\":\"struct DataTypes.ReserveConfigurationMap\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"}],\"name\":\"getReserveFlags\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxTokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minTokenId\",\"type\":\"uint256\"}],\"name\":\"getReserveId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"}],\"name\":\"getReserveNormalizedIncome\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"}],\"name\":\"getReserveNormalizedVariableDebt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getReserveUserStableRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReservesList\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"reservesList\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"underlyingCollateral\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"underlyingCollateralName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"underlyingCollateralSymbol\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"underlyingMaxTokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"underlyingMinTokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"underlyingAssetName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"underlyingAssetSymbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"underlyingAssetDecimals\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"fTokenImpl\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"fTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"fTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"stableDebtTokenImpl\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"stableDebtTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"stableDebtTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"variableDebtTokenImpl\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"variableDebtTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"variableDebtTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"interestRateStrategy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"baseLTV\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"creatorPercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"auctionCallerPercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"auctionCreatorPercentage\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"assetPriceFeed\",\"type\":\"string\"}],\"internalType\":\"struct ConfigTypes.InitReserveInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"fToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"stableDebtToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"variableDebtToken\",\"type\":\"address\"}],\"name\":\"initReserve\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addressProvider\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"borrowId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"name\":\"refinance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"borrowId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"repay\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"setMaxNumberOfReserves\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"val\",\"type\":\"bool\"}],\"name\":\"setPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"durationTime\",\"type\":\"uint256\"}],\"name\":\"setPausedTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"configuration\",\"type\":\"uint256\"}],\"name\":\"setReserveConfiguration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"}],\"name\":\"setReserveCreatorAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"percentage\",\"type\":\"uint256\"}],\"name\":\"setReserveCreatorPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"rateAddress\",\"type\":\"address\"}],\"name\":\"setReserveInterestRateAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxTokenSupply\",\"type\":\"uint256\"}],\"name\":\"setReserveMaxSupply\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"FluidNFT\",\"details\":\"This is our protocol's point of access. - For Upgradeable DO NOT ADJUST inheritance order\",\"kind\":\"dev\",\"methods\":{\"auction(uint256,address)\":{\"params\":{\"borrowId\":\"The id of the borrow.\",\"onBehalfOf\":\"The wallet to receive the auction caller fee.\"}},\"batchBorrow(uint256[],uint256[],uint256[],uint256[],uint256,address,uint16)\":{\"details\":\"Stack too deep to be able to be able to pass arrays for all variables\"},\"bid(address,uint256,uint256,address)\":{\"params\":{\"amount\":\"The amount of ERC20 tokens to be paid.\",\"asset\":\"The asset contract address.\",\"borrowId\":\"The id of the defaulted borrow.\",\"onBehalfOf\":\"The wallet to receive the underlying NFT.\"}},\"borrow(uint256,uint256,uint256,uint256,uint256,address,uint16)\":{\"params\":{\"amount\":\"The amount of ERC20 tokens to be borrowed.\",\"duration\":\"The duration of the loan, 0 if open-ended\",\"onBehalfOf\":\"The address to receive the loan.\",\"referralCode\":\"Code used to register the integrator originated the operation, for potential rewards.\",\"reserveId\":\"The id of the reserve to borrow against. \",\"tokenId\":\"The tokenId of the ERC721 / ERC1155 token to be deposited. \",\"tokenValue\":\"The number of same-value tokens supplied (0 implies ERC721)\"}},\"deposit(uint256,uint256,address,uint16)\":{\"params\":{\"amount\":\"The amount of ERC20 tokens.\",\"onBehalfOf\":\"Where to credit the deposit.\",\"referralCode\":\"Any referral code.\",\"reserveId\":\"The id of the reserve.\"}},\"finalizeTransfer(uint256,address,address,uint256,uint256,uint256)\":{\"details\":\"Validates and finalizes an fToken transfer - Only callable by the overlying fToken of the `asset`  \",\"params\":{\"amount\":\"The amount being transferred/withdrawn\",\"balanceFromBefore\":\"The fToken balance of the `from` user before the transfer\",\"balanceToBefore\":\"The fToken balance of the `to` user before the transfer\",\"from\":\"The user from which the fToken are transferred\",\"reserveId\":\"The id of the fToken reserve\",\"to\":\"The user receiving the fTokens\"}},\"getAddressProvider()\":{\"details\":\"Returns the cached AddressProvider connected to this contract*\"},\"getMaxNumberOfReserves()\":{\"details\":\"Returns the maximum number of reserves supported to be listed in this LendPool\"},\"getReserve(uint256)\":{\"details\":\"Returns the state and configuration of the reserve\",\"params\":{\"reserveId\":\"The id of the reserve\"},\"returns\":{\"_0\":\"The state of the reserve*\"}},\"getReserveConfiguration(uint256)\":{\"details\":\"Returns the configuration of the reserve\",\"params\":{\"reserveId\":\"The id of the reserve\"},\"returns\":{\"_0\":\"The configuration of the reserve*\"}},\"getReserveFlags(uint256)\":{\"details\":\"Returns the state of the resev\",\"params\":{\"reserveId\":\"The min id of the reserve\"},\"returns\":{\"_0\":\"The reserve user stable rate\"}},\"getReserveNormalizedVariableDebt(uint256)\":{\"details\":\"Returns the normalized variable debt per unit of asset\",\"params\":{\"reserveId\":\"The min id of the reserve\"},\"returns\":{\"_0\":\"The reserve normalized variable debt\"}},\"getReserveUserStableRate(uint256,address)\":{\"details\":\"Returns the reserve user stable rate\",\"params\":{\"reserveId\":\"The min id of the reserve\",\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The reserve user stable rate\"}},\"initReserve((address,string,string,uint256,uint256,address,string,string,uint8,address,string,string,address,string,string,address,string,string,address,uint256,address,address,uint256,uint256,uint256,string),address,address,address)\":{\"details\":\"Calls internal `_initReserve` function if modifiers are succeeded.    \",\"params\":{\"fToken\":\"The derivative fToken address.\",\"input\":\"The init reserve input parameters.\",\"stableDebtToken\":\"The derivative stableDebtToken address.\",\"variableDebtToken\":\"The derivative variableDebtToken address.\"}},\"initialize(address)\":{\"details\":\"Function is invoked by the proxy contract when the LendingPool contract is added to the AddressProvider of the market. - Caching the address of the AddressProvider in order to reduce gas consumption   on subsequent operations\",\"params\":{\"addressProvider\":\"The address of the AddressProvider*\"}},\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\":{\"details\":\"An ERC1155 `safeBatchTransferFrom` will revert unless this Solidity selector is returned.\",\"returns\":{\"_0\":\"Always returns `IERC1155Receiver.onERC1155BatchReceived.selector`.\"}},\"onERC1155Received(address,address,uint256,uint256,bytes)\":{\"details\":\"An ERC1155 `safeTransferFrom` will revert unless this Solidity selector is returned.\",\"returns\":{\"_0\":\"Always returns `IERC1155Receiver.onERC1155Received.selector`.\"}},\"onERC721Received(address,address,uint256,bytes)\":{\"details\":\"An ERC721 `safeTransferFrom` will revert unless this Solidity selector is returned.\",\"returns\":{\"_0\":\"Always returns `IERC721Receiver.onERC721Received.selector`.\"}},\"paused()\":{\"details\":\"Returns if the LendPool is paused\"},\"repay(uint256,uint256)\":{\"params\":{\"amount\":\"The amount of ERC20 tokens to be repaid.\",\"borrowId\":\"The id of the borrow to repay.\"}},\"setPause(bool)\":{\"details\":\"Set the _pause state of the pool - Only callable by the LendPoolConfigurator contract\",\"params\":{\"val\":\"`true` to pause the pool, `false` to un-pause it\"}},\"setReserveConfiguration(uint256,uint256)\":{\"details\":\"Sets the configuration bitmap of the reserve as a whole - Only callable by the Configurator contract\",\"params\":{\"configuration\":\"The new configuration bitmap*\",\"reserveId\":\"The min id of the reserve\"}},\"setReserveInterestRateAddress(uint256,address)\":{\"details\":\"Updates the address of the interest rate strategy contract - Only callable by the Configurator contract\",\"params\":{\"rateAddress\":\"The address of the interest rate strategy contract*\",\"reserveId\":\"The min id of the reserve\"}},\"supportsInterface(bytes4)\":{\"details\":\"Checks whether this contract implements the interface defined by `interfaceId`.\",\"params\":{\"_interfaceId\":\"Id of the interface\"},\"returns\":{\"_0\":\"true if this contract implements the interface\"}},\"withdraw(uint256,uint256,address)\":{\"params\":{\"amount\":\"The amount of ERC20 tokens.\",\"reserveId\":\"The reserve id.\",\"to\":\"The address that will receive the underlying, same as msg.sender if the user wants to receive to their wallet or different if the benefitiary is a different wallet\"}}},\"title\":\"Lending Pool contract for instant, permissionless NFT-backed loans\",\"version\":1},\"userdoc\":{\"events\":{\"Deposit(address,address,address,uint256,uint256,address,uint16)\":{\"notice\":\"Emitted when an asset deposit is made.\"},\"Withdraw(address,address,address,uint256,uint256,address)\":{\"notice\":\"Emitted when an asset withdraw is made.\"}},\"kind\":\"user\",\"methods\":{\"auction(uint256,address)\":{\"notice\":\"To trigger a liquidation auction\"},\"bid(address,uint256,uint256,address)\":{\"notice\":\"To purchase the underlying NFT of a defaulted borrow.\"},\"borrow(uint256,uint256,uint256,uint256,uint256,address,uint16)\":{\"notice\":\"External function to create a borrow position.\"},\"deposit(uint256,uint256,address,uint16)\":{\"notice\":\"Deposit assets into the lending pool.\"},\"initReserve((address,string,string,uint256,uint256,address,string,string,uint8,address,string,string,address,string,string,address,string,string,address,uint256,address,address,uint256,uint256,uint256,string),address,address,address)\":{\"notice\":\"Initializes a reserve.\"},\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\":{\"notice\":\"For the receiving of multiple ERC1155 tokens types to this contract address.\"},\"onERC1155Received(address,address,uint256,uint256,bytes)\":{\"notice\":\"For the receiving of ERC1155 tokens to this contract address.\"},\"onERC721Received(address,address,uint256,bytes)\":{\"notice\":\"For the receiving of ERC721 tokens to this contract address.\"},\"repay(uint256,uint256)\":{\"notice\":\"To repay a borrow position.\"},\"withdraw(uint256,uint256,address)\":{\"notice\":\"Withdraw assets from the lending pool.\"}},\"notice\":\"Allows for the borrow/repay of loans and deposit/withdraw of assets.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/protocol/p2pool/LendingPool.sol\":\"LendingPool\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@chainlink/=lib/chainlink/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":chainlink/=lib/chainlink/integration-tests/contracts/ethereum/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"lib/chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol\":{\"keccak256\":\"0x6e6e4b0835904509406b070ee173b5bc8f677c19421b76be38aea3b1b3d30846\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3beaa37ee61e4ab615e250fbf01601ae481de843fd0ef55e6b44fd9d5fff8a7\",\"dweb:/ipfs/QmeZUVwd26LzK4Mfp8Zba5JbQNkZFfTzFu1A6FVMMZDg9c\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://899f850f7df5a270bccfb765d70069959ca1c20d3a7381c1c3bda8a3ffee1935\",\"dweb:/ipfs/QmVdnAqwyX2L3nX2HDA5WKGtVBFyH1nKE9A1k7fZnPBkhP\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/security/ReentrancyGuardUpgradeable.sol\":{\"keccak256\":\"0x2b3005a0064cfc558bdf64b2bae94b565f4574a536aadd61c13838d4f2157790\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://622c3eb87563e71585c9f538d1a196fe2d154dcc5b8f335e8770a8acc95e1f3a\",\"dweb:/ipfs/QmSnDqJJLzv3mirjGB1vrk5X7hegFdS7BKpscpxyqj7sWu\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC1155/IERC1155ReceiverUpgradeable.sol\":{\"keccak256\":\"0xffcb29612efb57efc8f0d4897deb5abaeac830022c59a3aa17446d698dbc856b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a4da6e241d1d8c2ef214c311e02c749f45b5e0dd8168c667bc8ee6f67dcf4ce\",\"dweb:/ipfs/QmdsKj5frsNS7ZCfJBm4XNfy6MueV9udBF2FiBxVXwxybG\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC1155/IERC1155Upgradeable.sol\":{\"keccak256\":\"0x091a49ef99a2be002680781a10cc9dd74c0f348301ede5482c4ea625f79a8ffe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e037192cadfd20ad0f1b0c54a0c770a1ba551e7d0fcb6d3708e5ba352f88ded2\",\"dweb:/ipfs/QmTXwY6odV1ToDZAYxbbLKThe9M5PUWTmWBjwT776hH4qm\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol\":{\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2\",\"dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d\",\"dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/draft-IERC20PermitUpgradeable.sol\":{\"keccak256\":\"0xcc70d8e2281fb3ff69e8ab242500f10142cd0a7fa8dd9e45882be270d4d09024\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://17a4063bc918df0f7bb9cbf04c6f0bb4977afab3f2fc212bc138a178312a221d\",\"dweb:/ipfs/QmZMdvsHP5mDEAAdrK4bNeNh47TfmSFgN9qEBFTbie7zmm\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/utils/SafeERC20Upgradeable.sol\":{\"keccak256\":\"0x220c4a5af915e656be2aaa85ca57505d102418e476b1e2ef6c62e0c6ac143871\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6ed2c33173f7e7000889abed7c339b7a0e3b7867cdea546caaf6bc917ef1039c\",\"dweb:/ipfs/QmQ4Ye5h7jm6V4CdhT3r6hvf25DtiV74ErppQVE4SpRKj6\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC721/IERC721ReceiverUpgradeable.sol\":{\"keccak256\":\"0xbb2ed8106d94aeae6858e2551a1e7174df73994b77b13ebd120ccaaef80155f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8bc3c6a456dba727d8dd9fd33420febede490abb49a07469f61d2a3ace66a95a\",\"dweb:/ipfs/QmVAWtEVj7K5AbvgJa9Dz22KiDq9eoptCjnVZqsTMtKXyd\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC721/IERC721Upgradeable.sol\":{\"keccak256\":\"0x2c0b89cef83f353c6f9488c013d8a5968587ffdd6dfc26aad53774214b97e229\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a68e662c2a82412308b1feb24f3d61a44b3b8772f44cbd440446237313c3195\",\"dweb:/ipfs/QmfBuWUE2TQef9hghDzzuVkDskw3UGAyPgLmPifTNV7K6g\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://72460c66cd1c3b1c11b863e0d8df0a1c56f37743019e468dc312c754f43e3b06\",\"dweb:/ipfs/QmPExYKiNb9PUsgktQBupPaM33kzDHxaYoVeJdLhv8s879\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/IERC165Upgradeable.sol\":{\"keccak256\":\"0xc6cef87559d0aeffdf0a99803de655938a7779ec0a3cd5d4383483ad85565a09\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://92ad7e572cf44e6b4b37631b44b62f9eb9fb1cf14d9ce51c1504d5dc7ccaf758\",\"dweb:/ipfs/QmcnbqX85tsWnUXPmtuPLE4SczME2sJaTfmqEFkuAJvWhy\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95\",\"dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5a7b96e511be78d5cdf635c784e6ab8cdd38625bb8cafb8a80914a1c89cf0f6\",\"dweb:/ipfs/QmVzTCwJxQAkjRQHboT5QrvsVJGWQHgfEjeTbvyxoKBrds\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ec772b45a624be516f1c81970caa8a2e144301e9d0921cbc1a2789fef39a1269\",\"dweb:/ipfs/QmNyjwxCrGhQMyzLD93oUobJXVe9ceJvRvfXwbEtuxPiEj\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol\":{\"keccak256\":\"0x0f633a0223d9a1dcccfcf38a64c9de0874dfcbfac0c6941ccf074d63a2ce0e1e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://864a40efcffdf408044c332a5aa38ec5618ed7b4eecb8f65faf45671bd6cdc65\",\"dweb:/ipfs/QmQJquTMtc6fgm5JQzGdsGpA2fqBe3MHWEdt2qzaLySMdN\"]},\"src/interfaces/IAddressProvider.sol\":{\"keccak256\":\"0x6730abfcd8770e3279dad6137bf619ab98ee8b049e6dd85d2fbe87ba6224fde8\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://9b7d1588eab025b049f858ab2f329be7fec220198d956b9b61bf0b9bddc5761a\",\"dweb:/ipfs/QmTaFkYSUfWmbpsyE2TKC1QvP6eTDggZ72ZWodBhydqt5X\"]},\"src/interfaces/ICollateralManager.sol\":{\"keccak256\":\"0xdcb90cae810d15c23e0606ef3d9b30feec7d35e956082b88c1f35c5d6caf6438\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://c45a3cf14add38004018f32987cab971436cfd2e679eea71f2383f845bd68647\",\"dweb:/ipfs/QmPd9df3JmDFMHnhreYWw8tjmRGEQAtERnqj2YREXB5aP5\"]},\"src/interfaces/IExecutionDelegate.sol\":{\"keccak256\":\"0x9def180c3c45c492a967182aac61849fc1a77ca9f958abd3f27b689b01e61401\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cf406e8af1c9fa6373a66615022cd5c7edc41c169c46d660d5383df6647d3a5d\",\"dweb:/ipfs/QmRz7aDGbabWAw3BGFV2kbSmehGizSz3f7W87k6VXR3ggR\"]},\"src/interfaces/IFToken.sol\":{\"keccak256\":\"0x4c3ebc83c05720c9257d1b6b4930b647c08ba766b76928622a4c91c4a541a718\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://920cb41d52a659b88030fc3cf84fe5a87cc42f0c6e5c83a691c4732f84906689\",\"dweb:/ipfs/Qma657T4np5eBNono5yBXxE71jfT1TRDDkCPpH3kfw3SxM\"]},\"src/interfaces/IInitializableDebtToken.sol\":{\"keccak256\":\"0x29bcf86201c67f90d1620b5da4a0de05c611bf1fb15afeb6d2b30a70ec8aebca\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://e17c25e400ac37f1cd29b9cfdba2d4bc34aa6e0c705a619acf0c69f9136150d6\",\"dweb:/ipfs/QmTcNqEpq8UbZf6o6AgwJVjuNbrNbsZWfRMhQnuZArJQ6Q\"]},\"src/interfaces/IInterestRateStrategy.sol\":{\"keccak256\":\"0x71f8b91324433fbdb16a38e5b7c214e7c30094167a7aaf77fcb045194a63af16\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://ce7a18b9c191a676ab68f5d59449c22bead494ccba0c2272e6c8bd606a1c0fd3\",\"dweb:/ipfs/QmZ4byVDnoAH67dSSXppkhTbvdNs7mmQadUnmreoeZVbSv\"]},\"src/interfaces/ILendingPool.sol\":{\"keccak256\":\"0x345ab4285354bb5184bdd501d7c37920a711215b6f6c2db05b05d585f2454115\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://3b6264b135760dcdd59b9a3566c1305b00084922da177159a85c206ef6a91266\",\"dweb:/ipfs/QmSotEH7zF3vrEgo2gZuunWwroHgc6bw7TVRntzv7jsJn1\"]},\"src/interfaces/ILendingRateManager.sol\":{\"keccak256\":\"0x6078c32591ae3ced86c344ad2f228fbcc625f09cd59a8f7014355adb89dfcde0\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://fa594c0ceb1a0a085a6b077ac0729663f839f33f760eb8775ff1b3d25415e097\",\"dweb:/ipfs/QmXU74R73UDHiwvVaU9LRrC1tHaDq5eCerenKQtFX97UL6\"]},\"src/interfaces/INFTPriceOracle.sol\":{\"keccak256\":\"0x90a5ea4bb12f751a9af3f58c19de2b5f1d9ad36c074e584af8f8f0b24df98dac\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://a3acfe54780ea0fcd95ee9b8a4ce8a329599799f6949b6eb4828af79cf9e8659\",\"dweb:/ipfs/QmUujk8TLsLGyh7afmSpCX7G19ek44KfCyEJ3FHBXhEiR9\"]},\"src/interfaces/IObligationReceipt.sol\":{\"keccak256\":\"0xff3849eafbfe1c565e4bfd5d29b3cf9b19b2035387345b77a02abde96674a0ef\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://284d7b0d9168f23464c60b4dcdbfbb1b4d6990c501d37337f87a9b36ea557aec\",\"dweb:/ipfs/QmYMi2a6MZKgj54328vvTBwrDRfGB8nhJJX6BbLkuyMjFf\"]},\"src/interfaces/IPoolIncentivesController.sol\":{\"keccak256\":\"0x7cb2c32050814e6d6d962a603104facc3bb1dad15171304e3ee756648e8f9ae1\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://cf534f592706b2a61c539c03e5d1e199c15472bcfb4ee69838e5c93ba7914466\",\"dweb:/ipfs/QmPrvXhJigK1Ke51YwAWHon1Kv88WT26iD3MwzCaPDs1Kv\"]},\"src/interfaces/IPriceConsumerV3.sol\":{\"keccak256\":\"0x0d5b17684277591efc7c61a66c0a9d9fed38c858a2f2ca65fab3c0789d23026e\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://66fb8083f820b5a3c7b67184425971404bc74c790cad71cad997e870ba17a3e8\",\"dweb:/ipfs/QmWtkjrtu6NDSM1py1syo1aJfAE6Yi1E95eYmHMHhHQ7Aw\"]},\"src/interfaces/IRedeemable.sol\":{\"keccak256\":\"0x22d2cfb983b20307f4a8950e442a9007dccb3c637c22380492ba6cfa8e32b846\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://75c42863790291d3481ee10bead35f45abfb2a9844292c1ce2753ac69fc140eb\",\"dweb:/ipfs/QmUiSSYJasAaVQBpUkEvq1zQVzB3Mw65uAjSgDfr4YGvJY\"]},\"src/interfaces/IScaledBalanceToken.sol\":{\"keccak256\":\"0xb6a8f00773c5f58af761573f39f6aa3649c9deec5c4e078f5e3ca78940e4eac7\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://0938c6fd92b015670a2bcf5ff971aafbc6295e07c78d1300c5e36a67002dc70c\",\"dweb:/ipfs/QmYDcxNaAAfnupwDcDN1xtQcCEXTwW1FWiaTiU3MksCQ1Z\"]},\"src/interfaces/IStableDebtToken.sol\":{\"keccak256\":\"0x964a76facf6d0ea459fd0222c5e8036efea4e9193af3851d68190052037755b4\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://6eebeccfdd76a6e7691402b699c1185df09e8fe80c94cc059bd797a2931b9d3e\",\"dweb:/ipfs/QmeRY3xnu979DmjgFZSEaNgEkWgjtj4Hjpg9gW3bMoaZ1v\"]},\"src/interfaces/IVariableDebtToken.sol\":{\"keccak256\":\"0x61d5cce91604a2d97218fdf1f53022e08061aae2adc6dc5fb0ba311d46a212cc\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://e8e62cce1a93aafcff2438c111ca7af77c8c2a6ed3d5c7ffce2598aa73fb87c9\",\"dweb:/ipfs/QmXXpq9J65pU5Wt9WUR1sZMjss2gUDfEvpDAc9npQfxGcC\"]},\"src/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"keccak256\":\"0xa185efd08f4a3798bbafaa90fafd310f2e29634a2f83b62ee833b31a24232e3c\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://806a0ce876edbbbd418a8297735f66907a06650606b00eac5b510ab082ed3173\",\"dweb:/ipfs/QmQk5ybFrVqXfgXbndYcKBoQiahKScjFEABpJ3ATG8SYPh\"]},\"src/protocol/libraries/helpers/Errors.sol\":{\"keccak256\":\"0x490e76871922e89a13ba0bb88977be18c143fa9d0cd9afb033744a3d81479c52\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://1c409d4d1e1689d8d8f3c3e361198d20f3b6476608c5316d8e2d91f52373e8e3\",\"dweb:/ipfs/QmRZaYpxqjmBpbxb51KqswKYPSeCsU3ejbmk5E3MrMxJaM\"]},\"src/protocol/libraries/logic/BorrowLogic.sol\":{\"keccak256\":\"0x41584979c021aca9484ecf8eed27a67dc316332b43e80b98e3bd3617b9e44e3b\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://8f36478f308c11d09b48237c1cab7b070f2fa34fb5f6ed02172261a61146b5c3\",\"dweb:/ipfs/QmVfALy25gBU6RcsPTZMHRZRmRv4GjkH9zxBQ5spV69UET\"]},\"src/protocol/libraries/logic/GenericLogic.sol\":{\"keccak256\":\"0x9613130d98e3564a9dce097f7af399afbac4dc1e54ef86e31198537c2ffc058a\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://b754e6d8cad2c7fdd2a1686d56476ee2c4b450189526209787b8645ebe46542c\",\"dweb:/ipfs/QmNXRercwgggYU6SdBVtF9gD6kJqcTKrshc72gxv1nEeCd\"]},\"src/protocol/libraries/logic/LiquidateLogic.sol\":{\"keccak256\":\"0x7761714c2c93ae6ce76502724fa678b68dabb7c680cf62b0ef6666ceacfb2c9b\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://5d3ecf01ee169a1e01e4c23bc4e86bba666785e29a581fb997e11675b4f097d3\",\"dweb:/ipfs/QmfZjDj8pRJ4KDfF1cYL214nkMHSH2xgcc95sKmtYjmu3C\"]},\"src/protocol/libraries/logic/ReserveLogic.sol\":{\"keccak256\":\"0x62ec73dd19c9e36fd0c1a4aa4e1ca3250534010839cec91a5db5e6cadd29b556\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://f28b9df77a1d72fe06db1bb03d51881084fbcbbca060c3d1ce7172d0d7cbaf34\",\"dweb:/ipfs/QmexhggWDeu7ujHKU8xvGMG3FbV45EKBqbNAHne4rLEwCP\"]},\"src/protocol/libraries/logic/SupplyLogic.sol\":{\"keccak256\":\"0x3953a3284bbefe7cac7bc97dee696bc56850a634d985209e1203c8056b2f6e4c\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://2165cba5e23d52cb3893754898014337d6df09a6cf9108cb3b0b9f10ccd3d2ad\",\"dweb:/ipfs/QmWndqB4vuysuzynxfZBmQA7uQ9fNuaKNxctMUABr47nN5\"]},\"src/protocol/libraries/logic/ValidationLogic.sol\":{\"keccak256\":\"0x0f6512787e4c18afde885b84b1535b720f96cb7c7f6f97f4aca28f2dc610fece\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://20a5522498236525fee4c1cdad99c102d9b3e809a28eef6d2d3301ec65a6e182\",\"dweb:/ipfs/QmaUwsg4jFkdmJzmtT9eRQcEXFZmJT5NRZwHRVsJTqogoD\"]},\"src/protocol/libraries/math/MathUtils.sol\":{\"keccak256\":\"0x1c856137c4ef9d713b19a65adeb47c4490bd3b8414d7f28b364625226926779f\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://15c029cd4a3becaa47c72c1f5c18986b0a3cb488d8145e0bf88ce618a3d70841\",\"dweb:/ipfs/QmSYaWpWPbEHkRCegu5edAuRS3HTwyN2mFoSKm4yfGeec9\"]},\"src/protocol/libraries/math/PercentageMath.sol\":{\"keccak256\":\"0xb84274fc3effba81036256cf7fde67b3dbfe86c4ffd0e062711a3270157952a2\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://3ecaf26e713b39d89ee21fb8bfefe55fe2fec4a2f5a2bffba7612f82182b7262\",\"dweb:/ipfs/QmZ6oXpNspwBEkiJEz1EhsU4EVBpG3anNjtzcycNEgAkfe\"]},\"src/protocol/libraries/math/WadRayMath.sol\":{\"keccak256\":\"0xb29e8edc0e0e6bfead27945357c9e4a66e0c11e58ff3b87ee68ed1b5ca416735\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://d1b4377995155f32bb6c3ba558875c617fa63601c597099d3460063ac2a15d93\",\"dweb:/ipfs/QmUvCE6Q2J62sMgQCCEbQauWSYJpMiu3QCgWa6mZnEmcK2\"]},\"src/protocol/libraries/types/ConfigTypes.sol\":{\"keccak256\":\"0xa8f9b14d9adf738033fd1847b30012d0e022027614fd6c9bb31a01bc6bfb1634\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://b20c579d1b683dd5977a675c2e46adeebd56c96faa68cda9b0767edf02a5b650\",\"dweb:/ipfs/QmPULpaX2ouktArvXJxYNVPQ9vKBhEeCYA4smo8v57qFLD\"]},\"src/protocol/libraries/types/DataTypes.sol\":{\"keccak256\":\"0x0103c43499e5226d36906042a1723a3ee6ee18ba607cbffc9e776d4dc47edc10\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://550191b44b6ddfe84d81bd5ded46e1ab3ac493399adfca3634fd8348a4a087fa\",\"dweb:/ipfs/QmeoHga9azsBkTRdnzH9USs51JduGR2tgge5YmGW8dJ2Tq\"]},\"src/protocol/oracle/NFTPriceOracleStorage.sol\":{\"keccak256\":\"0x9847005d0c1f4d6504031346e37d421ed676afcb4711908dd3038254444088dd\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://b9ef1ed0f1716aa142c1f584b5b77a7ef5b1a3ab90f1f9fbe84b146083d8dd77\",\"dweb:/ipfs/QmQCfhtqHjfQWBokhWkGdZnfVmxsCLU5QkTW1bzEUfincT\"]},\"src/protocol/oracle/Trustus.sol\":{\"keccak256\":\"0xf3ffd2cf22289fcdd27a05a2718ef39912ecc20e57f0578907489446c2bb8cb1\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://1d0a2967648f2278b026ef458424b592b0322e08c33e629af50102c70ab205be\",\"dweb:/ipfs/QmQVWxPwCQinbZCWeJSgyDdTgrUzULxwpcxqXnPrpx3rTk\"]},\"src/protocol/p2pool/LendingPool.sol\":{\"keccak256\":\"0xfd48ac643d7f44d95a4174052404228bb6aa7d5b735ea225b076236ae34bb301\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://7af5b1a4e18efecf111d52b0c58b45f4547e4224a60a9e184281178a29880622\",\"dweb:/ipfs/QmWT7bWTHv47DHGNdt4p6FbCVAcwE3jkGm4Ay3ruo3Hu68\"]},\"src/protocol/p2pool/LendingPoolStorage.sol\":{\"keccak256\":\"0xc31280ac99fa78654a1ba2ab8190aa1467ba0adbbc4594e01396bff7b24dc3f5\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://70783c839e90b8ab5cdb6907ba60b95cb4b525ff087e760ba29b8e2f597193b1\",\"dweb:/ipfs/Qmeorb6PDCsdXJEM9kehU1pAasPxY95q6WMg4FwCyX6NCQ\"]}},\"version\":1}",
  "metadata": {
    "compiler": {
      "version": "0.8.16+commit.07a7930e"
    },
    "language": "Solidity",
    "output": {
      "abi": [
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "initiator",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "asset",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "duration",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "address",
              "name": "collateral",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "address",
              "name": "onBehalfOf",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "borrowRate",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "borrowId",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint16",
              "name": "referral",
              "type": "uint16",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "Borrow",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "initiator",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "address",
              "name": "collateral",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "address",
              "name": "asset",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "address",
              "name": "onBehalfOf",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint16",
              "name": "referalCode",
              "type": "uint16",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "Deposit",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint8",
              "name": "version",
              "type": "uint8",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Initialized",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "user",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "collateral",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "address",
              "name": "borrower",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "borrowId",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "address",
              "name": "paymentAsset",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "paymentAmount",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "address",
              "name": "onBehalfOf",
              "type": "address",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Liquidate",
          "anonymous": false
        },
        {
          "inputs": [],
          "type": "event",
          "name": "Paused",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "startTime",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "durationTime",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "PausedTimeUpdated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "initiator",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "address",
              "name": "borrower",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "borrowId",
              "type": "uint256",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "collateral",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "address",
              "name": "asset",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "amountAdded",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "amountTaken",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "defaultFee",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "duration",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "timestamp",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Refinanced",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "initiator",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "asset",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "address",
              "name": "collateral",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "address",
              "name": "borrower",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "borrowId",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Repay",
          "anonymous": false
        },
        {
          "inputs": [],
          "type": "event",
          "name": "Unpaused",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "initiator",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "collateral",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "address",
              "name": "asset",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "Withdraw",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "borrowId",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "onBehalfOf",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "auction"
        },
        {
          "inputs": [
            {
              "internalType": "uint256[]",
              "name": "borrowIds",
              "type": "uint256[]"
            },
            {
              "internalType": "address[]",
              "name": "onBehalfOfs",
              "type": "address[]"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "batchAuction"
        },
        {
          "inputs": [
            {
              "internalType": "address[]",
              "name": "assets",
              "type": "address[]"
            },
            {
              "internalType": "uint256[]",
              "name": "amounts",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256[]",
              "name": "borrowIds",
              "type": "uint256[]"
            },
            {
              "internalType": "address[]",
              "name": "onBehalfOfs",
              "type": "address[]"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "batchBid"
        },
        {
          "inputs": [
            {
              "internalType": "uint256[]",
              "name": "amounts",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256[]",
              "name": "tokenIds",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256[]",
              "name": "tokenValues",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256[]",
              "name": "reserveIds",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256",
              "name": "duration",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "onBehalfOf",
              "type": "address"
            },
            {
              "internalType": "uint16",
              "name": "referralCode",
              "type": "uint16"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "batchBorrow"
        },
        {
          "inputs": [
            {
              "internalType": "uint256[]",
              "name": "amounts",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256[]",
              "name": "reserveIds",
              "type": "uint256[]"
            },
            {
              "internalType": "address[]",
              "name": "onBehalfOfs",
              "type": "address[]"
            },
            {
              "internalType": "uint16[]",
              "name": "referralCodes",
              "type": "uint16[]"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "batchDeposit"
        },
        {
          "inputs": [
            {
              "internalType": "uint256[]",
              "name": "borrowIds",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256[]",
              "name": "amounts",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256[]",
              "name": "durations",
              "type": "uint256[]"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "batchRefinance"
        },
        {
          "inputs": [
            {
              "internalType": "uint256[]",
              "name": "borrowIds",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256[]",
              "name": "amounts",
              "type": "uint256[]"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "batchRepay"
        },
        {
          "inputs": [
            {
              "internalType": "uint256[]",
              "name": "amounts",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256[]",
              "name": "reserveIds",
              "type": "uint256[]"
            },
            {
              "internalType": "address[]",
              "name": "tos",
              "type": "address[]"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "batchWithdraw"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "asset",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "borrowId",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "onBehalfOf",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "bid"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "tokenValue",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "duration",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "onBehalfOf",
              "type": "address"
            },
            {
              "internalType": "uint16",
              "name": "referralCode",
              "type": "uint16"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "borrow"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "onBehalfOf",
              "type": "address"
            },
            {
              "internalType": "uint16",
              "name": "referralCode",
              "type": "uint16"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "deposit"
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "executionDelegate",
          "outputs": [
            {
              "internalType": "contract IExecutionDelegate",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "from",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "balanceFromBefore",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "balanceToBefore",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "finalizeTransfer"
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getAddressProvider",
          "outputs": [
            {
              "internalType": "contract IAddressProvider",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getAuctionConfiguration",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "borrowId",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getBorrowHealthFactor",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getInitializedAssets",
          "outputs": [
            {
              "internalType": "address[]",
              "name": "",
              "type": "address[]"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getInitializedCollaterals",
          "outputs": [
            {
              "internalType": "address[]",
              "name": "",
              "type": "address[]"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getMaxNumberOfReserves",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getPausedTime",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getReserve",
          "outputs": [
            {
              "internalType": "struct DataTypes.Reserve",
              "name": "",
              "type": "tuple",
              "components": [
                {
                  "internalType": "struct DataTypes.ReserveConfigurationMap",
                  "name": "configuration",
                  "type": "tuple",
                  "components": [
                    {
                      "internalType": "uint256",
                      "name": "data",
                      "type": "uint256"
                    }
                  ]
                },
                {
                  "internalType": "address",
                  "name": "collateral",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "asset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "fTokenAddress",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "stableDebtTokenAddress",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "variableDebtTokenAddress",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "interestRateAddress",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "assetPriceFeed",
                  "type": "string"
                },
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "maxTokenSupply",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "maxTokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "minTokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "uint128",
                  "name": "liquidityIndex",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "variableBorrowIndex",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "currentLiquidityRate",
                  "type": "uint128"
                },
                {
                  "internalType": "uint128",
                  "name": "currentVariableBorrowRate",
                  "type": "uint128"
                },
                {
                  "internalType": "uint40",
                  "name": "lastUpdateTimestamp",
                  "type": "uint40"
                }
              ]
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getReserveConfiguration",
          "outputs": [
            {
              "internalType": "struct DataTypes.ReserveConfigurationMap",
              "name": "",
              "type": "tuple",
              "components": [
                {
                  "internalType": "uint256",
                  "name": "data",
                  "type": "uint256"
                }
              ]
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getReserveFlags",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            },
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            },
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            },
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "collateral",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "asset",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "maxTokenId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "minTokenId",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getReserveId",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getReserveNormalizedIncome",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getReserveNormalizedVariableDebt",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "user",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getReserveUserStableRate",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getReservesList",
          "outputs": [
            {
              "internalType": "uint256[]",
              "name": "reservesList",
              "type": "uint256[]"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "struct ConfigTypes.InitReserveInput",
              "name": "input",
              "type": "tuple",
              "components": [
                {
                  "internalType": "address",
                  "name": "underlyingCollateral",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "underlyingCollateralName",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "underlyingCollateralSymbol",
                  "type": "string"
                },
                {
                  "internalType": "uint256",
                  "name": "underlyingMaxTokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "underlyingMinTokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "underlyingAsset",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "underlyingAssetName",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "underlyingAssetSymbol",
                  "type": "string"
                },
                {
                  "internalType": "uint8",
                  "name": "underlyingAssetDecimals",
                  "type": "uint8"
                },
                {
                  "internalType": "address",
                  "name": "fTokenImpl",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "fTokenName",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "fTokenSymbol",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "stableDebtTokenImpl",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "stableDebtTokenName",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "stableDebtTokenSymbol",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "variableDebtTokenImpl",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "variableDebtTokenName",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "variableDebtTokenSymbol",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "interestRateStrategy",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "baseLTV",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "treasury",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "creator",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "creatorPercentage",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "auctionCallerPercentage",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "auctionCreatorPercentage",
                  "type": "uint256"
                },
                {
                  "internalType": "string",
                  "name": "assetPriceFeed",
                  "type": "string"
                }
              ]
            },
            {
              "internalType": "address",
              "name": "fToken",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "stableDebtToken",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "variableDebtToken",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "initReserve",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "addressProvider",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "initialize"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            },
            {
              "internalType": "uint256[]",
              "name": "",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256[]",
              "name": "",
              "type": "uint256[]"
            },
            {
              "internalType": "bytes",
              "name": "",
              "type": "bytes"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "onERC1155BatchReceived",
          "outputs": [
            {
              "internalType": "bytes4",
              "name": "",
              "type": "bytes4"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "",
              "type": "bytes"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "onERC1155Received",
          "outputs": [
            {
              "internalType": "bytes4",
              "name": "",
              "type": "bytes4"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "",
              "type": "bytes"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "onERC721Received",
          "outputs": [
            {
              "internalType": "bytes4",
              "name": "",
              "type": "bytes4"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "paused",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "borrowId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "duration",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "refinance"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "borrowId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "repay"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "val",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setMaxNumberOfReserves"
        },
        {
          "inputs": [
            {
              "internalType": "bool",
              "name": "val",
              "type": "bool"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setPause"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "startTime",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "durationTime",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setPausedTime"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "configuration",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setReserveConfiguration"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "creator",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setReserveCreatorAddress"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "percentage",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setReserveCreatorPercentage"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "rateAddress",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setReserveInterestRateAddress"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxTokenSupply",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setReserveMaxSupply"
        },
        {
          "inputs": [
            {
              "internalType": "bytes4",
              "name": "_interfaceId",
              "type": "bytes4"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "supportsInterface",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "withdraw"
        }
      ],
      "devdoc": {
        "kind": "dev",
        "methods": {
          "auction(uint256,address)": {
            "params": {
              "borrowId": "The id of the borrow.",
              "onBehalfOf": "The wallet to receive the auction caller fee."
            }
          },
          "batchBorrow(uint256[],uint256[],uint256[],uint256[],uint256,address,uint16)": {
            "details": "Stack too deep to be able to be able to pass arrays for all variables"
          },
          "bid(address,uint256,uint256,address)": {
            "params": {
              "amount": "The amount of ERC20 tokens to be paid.",
              "asset": "The asset contract address.",
              "borrowId": "The id of the defaulted borrow.",
              "onBehalfOf": "The wallet to receive the underlying NFT."
            }
          },
          "borrow(uint256,uint256,uint256,uint256,uint256,address,uint16)": {
            "params": {
              "amount": "The amount of ERC20 tokens to be borrowed.",
              "duration": "The duration of the loan, 0 if open-ended",
              "onBehalfOf": "The address to receive the loan.",
              "referralCode": "Code used to register the integrator originated the operation, for potential rewards.",
              "reserveId": "The id of the reserve to borrow against. ",
              "tokenId": "The tokenId of the ERC721 / ERC1155 token to be deposited. ",
              "tokenValue": "The number of same-value tokens supplied (0 implies ERC721)"
            }
          },
          "deposit(uint256,uint256,address,uint16)": {
            "params": {
              "amount": "The amount of ERC20 tokens.",
              "onBehalfOf": "Where to credit the deposit.",
              "referralCode": "Any referral code.",
              "reserveId": "The id of the reserve."
            }
          },
          "finalizeTransfer(uint256,address,address,uint256,uint256,uint256)": {
            "details": "Validates and finalizes an fToken transfer - Only callable by the overlying fToken of the `asset`  ",
            "params": {
              "amount": "The amount being transferred/withdrawn",
              "balanceFromBefore": "The fToken balance of the `from` user before the transfer",
              "balanceToBefore": "The fToken balance of the `to` user before the transfer",
              "from": "The user from which the fToken are transferred",
              "reserveId": "The id of the fToken reserve",
              "to": "The user receiving the fTokens"
            }
          },
          "getAddressProvider()": {
            "details": "Returns the cached AddressProvider connected to this contract*"
          },
          "getMaxNumberOfReserves()": {
            "details": "Returns the maximum number of reserves supported to be listed in this LendPool"
          },
          "getReserve(uint256)": {
            "details": "Returns the state and configuration of the reserve",
            "params": {
              "reserveId": "The id of the reserve"
            },
            "returns": {
              "_0": "The state of the reserve*"
            }
          },
          "getReserveConfiguration(uint256)": {
            "details": "Returns the configuration of the reserve",
            "params": {
              "reserveId": "The id of the reserve"
            },
            "returns": {
              "_0": "The configuration of the reserve*"
            }
          },
          "getReserveFlags(uint256)": {
            "details": "Returns the state of the resev",
            "params": {
              "reserveId": "The min id of the reserve"
            },
            "returns": {
              "_0": "The reserve user stable rate"
            }
          },
          "getReserveNormalizedVariableDebt(uint256)": {
            "details": "Returns the normalized variable debt per unit of asset",
            "params": {
              "reserveId": "The min id of the reserve"
            },
            "returns": {
              "_0": "The reserve normalized variable debt"
            }
          },
          "getReserveUserStableRate(uint256,address)": {
            "details": "Returns the reserve user stable rate",
            "params": {
              "reserveId": "The min id of the reserve",
              "user": "The address of the user"
            },
            "returns": {
              "_0": "The reserve user stable rate"
            }
          },
          "initReserve((address,string,string,uint256,uint256,address,string,string,uint8,address,string,string,address,string,string,address,string,string,address,uint256,address,address,uint256,uint256,uint256,string),address,address,address)": {
            "details": "Calls internal `_initReserve` function if modifiers are succeeded.    ",
            "params": {
              "fToken": "The derivative fToken address.",
              "input": "The init reserve input parameters.",
              "stableDebtToken": "The derivative stableDebtToken address.",
              "variableDebtToken": "The derivative variableDebtToken address."
            }
          },
          "initialize(address)": {
            "details": "Function is invoked by the proxy contract when the LendingPool contract is added to the AddressProvider of the market. - Caching the address of the AddressProvider in order to reduce gas consumption   on subsequent operations",
            "params": {
              "addressProvider": "The address of the AddressProvider*"
            }
          },
          "onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)": {
            "details": "An ERC1155 `safeBatchTransferFrom` will revert unless this Solidity selector is returned.",
            "returns": {
              "_0": "Always returns `IERC1155Receiver.onERC1155BatchReceived.selector`."
            }
          },
          "onERC1155Received(address,address,uint256,uint256,bytes)": {
            "details": "An ERC1155 `safeTransferFrom` will revert unless this Solidity selector is returned.",
            "returns": {
              "_0": "Always returns `IERC1155Receiver.onERC1155Received.selector`."
            }
          },
          "onERC721Received(address,address,uint256,bytes)": {
            "details": "An ERC721 `safeTransferFrom` will revert unless this Solidity selector is returned.",
            "returns": {
              "_0": "Always returns `IERC721Receiver.onERC721Received.selector`."
            }
          },
          "paused()": {
            "details": "Returns if the LendPool is paused"
          },
          "repay(uint256,uint256)": {
            "params": {
              "amount": "The amount of ERC20 tokens to be repaid.",
              "borrowId": "The id of the borrow to repay."
            }
          },
          "setPause(bool)": {
            "details": "Set the _pause state of the pool - Only callable by the LendPoolConfigurator contract",
            "params": {
              "val": "`true` to pause the pool, `false` to un-pause it"
            }
          },
          "setReserveConfiguration(uint256,uint256)": {
            "details": "Sets the configuration bitmap of the reserve as a whole - Only callable by the Configurator contract",
            "params": {
              "configuration": "The new configuration bitmap*",
              "reserveId": "The min id of the reserve"
            }
          },
          "setReserveInterestRateAddress(uint256,address)": {
            "details": "Updates the address of the interest rate strategy contract - Only callable by the Configurator contract",
            "params": {
              "rateAddress": "The address of the interest rate strategy contract*",
              "reserveId": "The min id of the reserve"
            }
          },
          "supportsInterface(bytes4)": {
            "details": "Checks whether this contract implements the interface defined by `interfaceId`.",
            "params": {
              "_interfaceId": "Id of the interface"
            },
            "returns": {
              "_0": "true if this contract implements the interface"
            }
          },
          "withdraw(uint256,uint256,address)": {
            "params": {
              "amount": "The amount of ERC20 tokens.",
              "reserveId": "The reserve id.",
              "to": "The address that will receive the underlying, same as msg.sender if the user wants to receive to their wallet or different if the benefitiary is a different wallet"
            }
          }
        },
        "version": 1
      },
      "userdoc": {
        "kind": "user",
        "methods": {
          "auction(uint256,address)": {
            "notice": "To trigger a liquidation auction"
          },
          "bid(address,uint256,uint256,address)": {
            "notice": "To purchase the underlying NFT of a defaulted borrow."
          },
          "borrow(uint256,uint256,uint256,uint256,uint256,address,uint16)": {
            "notice": "External function to create a borrow position."
          },
          "deposit(uint256,uint256,address,uint16)": {
            "notice": "Deposit assets into the lending pool."
          },
          "initReserve((address,string,string,uint256,uint256,address,string,string,uint8,address,string,string,address,string,string,address,string,string,address,uint256,address,address,uint256,uint256,uint256,string),address,address,address)": {
            "notice": "Initializes a reserve."
          },
          "onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)": {
            "notice": "For the receiving of multiple ERC1155 tokens types to this contract address."
          },
          "onERC1155Received(address,address,uint256,uint256,bytes)": {
            "notice": "For the receiving of ERC1155 tokens to this contract address."
          },
          "onERC721Received(address,address,uint256,bytes)": {
            "notice": "For the receiving of ERC721 tokens to this contract address."
          },
          "repay(uint256,uint256)": {
            "notice": "To repay a borrow position."
          },
          "withdraw(uint256,uint256,address)": {
            "notice": "Withdraw assets from the lending pool."
          }
        },
        "version": 1
      }
    },
    "settings": {
      "remappings": [
        ":@chainlink/=lib/chainlink/",
        ":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
        ":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
        ":chainlink/=lib/chainlink/integration-tests/contracts/ethereum/src/",
        ":ds-test/=lib/forge-std/lib/ds-test/src/",
        ":forge-std/=lib/forge-std/src/"
      ],
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "metadata": {
        "bytecodeHash": "ipfs"
      },
      "compilationTarget": {
        "src/protocol/p2pool/LendingPool.sol": "LendingPool"
      },
      "libraries": {}
    },
    "sources": {
      "lib/chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol": {
        "keccak256": "0x6e6e4b0835904509406b070ee173b5bc8f677c19421b76be38aea3b1b3d30846",
        "urls": [
          "bzz-raw://b3beaa37ee61e4ab615e250fbf01601ae481de843fd0ef55e6b44fd9d5fff8a7",
          "dweb:/ipfs/QmeZUVwd26LzK4Mfp8Zba5JbQNkZFfTzFu1A6FVMMZDg9c"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": {
        "keccak256": "0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27",
        "urls": [
          "bzz-raw://899f850f7df5a270bccfb765d70069959ca1c20d3a7381c1c3bda8a3ffee1935",
          "dweb:/ipfs/QmVdnAqwyX2L3nX2HDA5WKGtVBFyH1nKE9A1k7fZnPBkhP"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/security/ReentrancyGuardUpgradeable.sol": {
        "keccak256": "0x2b3005a0064cfc558bdf64b2bae94b565f4574a536aadd61c13838d4f2157790",
        "urls": [
          "bzz-raw://622c3eb87563e71585c9f538d1a196fe2d154dcc5b8f335e8770a8acc95e1f3a",
          "dweb:/ipfs/QmSnDqJJLzv3mirjGB1vrk5X7hegFdS7BKpscpxyqj7sWu"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC1155/IERC1155ReceiverUpgradeable.sol": {
        "keccak256": "0xffcb29612efb57efc8f0d4897deb5abaeac830022c59a3aa17446d698dbc856b",
        "urls": [
          "bzz-raw://4a4da6e241d1d8c2ef214c311e02c749f45b5e0dd8168c667bc8ee6f67dcf4ce",
          "dweb:/ipfs/QmdsKj5frsNS7ZCfJBm4XNfy6MueV9udBF2FiBxVXwxybG"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC1155/IERC1155Upgradeable.sol": {
        "keccak256": "0x091a49ef99a2be002680781a10cc9dd74c0f348301ede5482c4ea625f79a8ffe",
        "urls": [
          "bzz-raw://e037192cadfd20ad0f1b0c54a0c770a1ba551e7d0fcb6d3708e5ba352f88ded2",
          "dweb:/ipfs/QmTXwY6odV1ToDZAYxbbLKThe9M5PUWTmWBjwT776hH4qm"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": {
        "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff",
        "urls": [
          "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2",
          "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol": {
        "keccak256": "0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb",
        "urls": [
          "bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d",
          "dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/draft-IERC20PermitUpgradeable.sol": {
        "keccak256": "0xcc70d8e2281fb3ff69e8ab242500f10142cd0a7fa8dd9e45882be270d4d09024",
        "urls": [
          "bzz-raw://17a4063bc918df0f7bb9cbf04c6f0bb4977afab3f2fc212bc138a178312a221d",
          "dweb:/ipfs/QmZMdvsHP5mDEAAdrK4bNeNh47TfmSFgN9qEBFTbie7zmm"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/utils/SafeERC20Upgradeable.sol": {
        "keccak256": "0x220c4a5af915e656be2aaa85ca57505d102418e476b1e2ef6c62e0c6ac143871",
        "urls": [
          "bzz-raw://6ed2c33173f7e7000889abed7c339b7a0e3b7867cdea546caaf6bc917ef1039c",
          "dweb:/ipfs/QmQ4Ye5h7jm6V4CdhT3r6hvf25DtiV74ErppQVE4SpRKj6"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC721/IERC721ReceiverUpgradeable.sol": {
        "keccak256": "0xbb2ed8106d94aeae6858e2551a1e7174df73994b77b13ebd120ccaaef80155f5",
        "urls": [
          "bzz-raw://8bc3c6a456dba727d8dd9fd33420febede490abb49a07469f61d2a3ace66a95a",
          "dweb:/ipfs/QmVAWtEVj7K5AbvgJa9Dz22KiDq9eoptCjnVZqsTMtKXyd"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC721/IERC721Upgradeable.sol": {
        "keccak256": "0x2c0b89cef83f353c6f9488c013d8a5968587ffdd6dfc26aad53774214b97e229",
        "urls": [
          "bzz-raw://4a68e662c2a82412308b1feb24f3d61a44b3b8772f44cbd440446237313c3195",
          "dweb:/ipfs/QmfBuWUE2TQef9hghDzzuVkDskw3UGAyPgLmPifTNV7K6g"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": {
        "keccak256": "0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183",
        "urls": [
          "bzz-raw://72460c66cd1c3b1c11b863e0d8df0a1c56f37743019e468dc312c754f43e3b06",
          "dweb:/ipfs/QmPExYKiNb9PUsgktQBupPaM33kzDHxaYoVeJdLhv8s879"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": {
        "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149",
        "urls": [
          "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c",
          "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/IERC165Upgradeable.sol": {
        "keccak256": "0xc6cef87559d0aeffdf0a99803de655938a7779ec0a3cd5d4383483ad85565a09",
        "urls": [
          "bzz-raw://92ad7e572cf44e6b4b37631b44b62f9eb9fb1cf14d9ce51c1504d5dc7ccaf758",
          "dweb:/ipfs/QmcnbqX85tsWnUXPmtuPLE4SczME2sJaTfmqEFkuAJvWhy"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol": {
        "keccak256": "0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b",
        "urls": [
          "bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34",
          "dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC20/extensions/draft-IERC20Permit.sol": {
        "keccak256": "0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329",
        "urls": [
          "bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95",
          "dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol": {
        "keccak256": "0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238",
        "urls": [
          "bzz-raw://f5a7b96e511be78d5cdf635c784e6ab8cdd38625bb8cafb8a80914a1c89cf0f6",
          "dweb:/ipfs/QmVzTCwJxQAkjRQHboT5QrvsVJGWQHgfEjeTbvyxoKBrds"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/Address.sol": {
        "keccak256": "0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1",
        "urls": [
          "bzz-raw://ec772b45a624be516f1c81970caa8a2e144301e9d0921cbc1a2789fef39a1269",
          "dweb:/ipfs/QmNyjwxCrGhQMyzLD93oUobJXVe9ceJvRvfXwbEtuxPiEj"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol": {
        "keccak256": "0x0f633a0223d9a1dcccfcf38a64c9de0874dfcbfac0c6941ccf074d63a2ce0e1e",
        "urls": [
          "bzz-raw://864a40efcffdf408044c332a5aa38ec5618ed7b4eecb8f65faf45671bd6cdc65",
          "dweb:/ipfs/QmQJquTMtc6fgm5JQzGdsGpA2fqBe3MHWEdt2qzaLySMdN"
        ],
        "license": "MIT"
      },
      "src/interfaces/IAddressProvider.sol": {
        "keccak256": "0x6730abfcd8770e3279dad6137bf619ab98ee8b049e6dd85d2fbe87ba6224fde8",
        "urls": [
          "bzz-raw://9b7d1588eab025b049f858ab2f329be7fec220198d956b9b61bf0b9bddc5761a",
          "dweb:/ipfs/QmTaFkYSUfWmbpsyE2TKC1QvP6eTDggZ72ZWodBhydqt5X"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/ICollateralManager.sol": {
        "keccak256": "0xdcb90cae810d15c23e0606ef3d9b30feec7d35e956082b88c1f35c5d6caf6438",
        "urls": [
          "bzz-raw://c45a3cf14add38004018f32987cab971436cfd2e679eea71f2383f845bd68647",
          "dweb:/ipfs/QmPd9df3JmDFMHnhreYWw8tjmRGEQAtERnqj2YREXB5aP5"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/IExecutionDelegate.sol": {
        "keccak256": "0x9def180c3c45c492a967182aac61849fc1a77ca9f958abd3f27b689b01e61401",
        "urls": [
          "bzz-raw://cf406e8af1c9fa6373a66615022cd5c7edc41c169c46d660d5383df6647d3a5d",
          "dweb:/ipfs/QmRz7aDGbabWAw3BGFV2kbSmehGizSz3f7W87k6VXR3ggR"
        ],
        "license": "MIT"
      },
      "src/interfaces/IFToken.sol": {
        "keccak256": "0x4c3ebc83c05720c9257d1b6b4930b647c08ba766b76928622a4c91c4a541a718",
        "urls": [
          "bzz-raw://920cb41d52a659b88030fc3cf84fe5a87cc42f0c6e5c83a691c4732f84906689",
          "dweb:/ipfs/Qma657T4np5eBNono5yBXxE71jfT1TRDDkCPpH3kfw3SxM"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/IInitializableDebtToken.sol": {
        "keccak256": "0x29bcf86201c67f90d1620b5da4a0de05c611bf1fb15afeb6d2b30a70ec8aebca",
        "urls": [
          "bzz-raw://e17c25e400ac37f1cd29b9cfdba2d4bc34aa6e0c705a619acf0c69f9136150d6",
          "dweb:/ipfs/QmTcNqEpq8UbZf6o6AgwJVjuNbrNbsZWfRMhQnuZArJQ6Q"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/IInterestRateStrategy.sol": {
        "keccak256": "0x71f8b91324433fbdb16a38e5b7c214e7c30094167a7aaf77fcb045194a63af16",
        "urls": [
          "bzz-raw://ce7a18b9c191a676ab68f5d59449c22bead494ccba0c2272e6c8bd606a1c0fd3",
          "dweb:/ipfs/QmZ4byVDnoAH67dSSXppkhTbvdNs7mmQadUnmreoeZVbSv"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/ILendingPool.sol": {
        "keccak256": "0x345ab4285354bb5184bdd501d7c37920a711215b6f6c2db05b05d585f2454115",
        "urls": [
          "bzz-raw://3b6264b135760dcdd59b9a3566c1305b00084922da177159a85c206ef6a91266",
          "dweb:/ipfs/QmSotEH7zF3vrEgo2gZuunWwroHgc6bw7TVRntzv7jsJn1"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/ILendingRateManager.sol": {
        "keccak256": "0x6078c32591ae3ced86c344ad2f228fbcc625f09cd59a8f7014355adb89dfcde0",
        "urls": [
          "bzz-raw://fa594c0ceb1a0a085a6b077ac0729663f839f33f760eb8775ff1b3d25415e097",
          "dweb:/ipfs/QmXU74R73UDHiwvVaU9LRrC1tHaDq5eCerenKQtFX97UL6"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/INFTPriceOracle.sol": {
        "keccak256": "0x90a5ea4bb12f751a9af3f58c19de2b5f1d9ad36c074e584af8f8f0b24df98dac",
        "urls": [
          "bzz-raw://a3acfe54780ea0fcd95ee9b8a4ce8a329599799f6949b6eb4828af79cf9e8659",
          "dweb:/ipfs/QmUujk8TLsLGyh7afmSpCX7G19ek44KfCyEJ3FHBXhEiR9"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/IObligationReceipt.sol": {
        "keccak256": "0xff3849eafbfe1c565e4bfd5d29b3cf9b19b2035387345b77a02abde96674a0ef",
        "urls": [
          "bzz-raw://284d7b0d9168f23464c60b4dcdbfbb1b4d6990c501d37337f87a9b36ea557aec",
          "dweb:/ipfs/QmYMi2a6MZKgj54328vvTBwrDRfGB8nhJJX6BbLkuyMjFf"
        ],
        "license": "BUSL-1.1"
      },
      "src/interfaces/IPoolIncentivesController.sol": {
        "keccak256": "0x7cb2c32050814e6d6d962a603104facc3bb1dad15171304e3ee756648e8f9ae1",
        "urls": [
          "bzz-raw://cf534f592706b2a61c539c03e5d1e199c15472bcfb4ee69838e5c93ba7914466",
          "dweb:/ipfs/QmPrvXhJigK1Ke51YwAWHon1Kv88WT26iD3MwzCaPDs1Kv"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/IPriceConsumerV3.sol": {
        "keccak256": "0x0d5b17684277591efc7c61a66c0a9d9fed38c858a2f2ca65fab3c0789d23026e",
        "urls": [
          "bzz-raw://66fb8083f820b5a3c7b67184425971404bc74c790cad71cad997e870ba17a3e8",
          "dweb:/ipfs/QmWtkjrtu6NDSM1py1syo1aJfAE6Yi1E95eYmHMHhHQ7Aw"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/IRedeemable.sol": {
        "keccak256": "0x22d2cfb983b20307f4a8950e442a9007dccb3c637c22380492ba6cfa8e32b846",
        "urls": [
          "bzz-raw://75c42863790291d3481ee10bead35f45abfb2a9844292c1ce2753ac69fc140eb",
          "dweb:/ipfs/QmUiSSYJasAaVQBpUkEvq1zQVzB3Mw65uAjSgDfr4YGvJY"
        ],
        "license": "BUSL-1.1"
      },
      "src/interfaces/IScaledBalanceToken.sol": {
        "keccak256": "0xb6a8f00773c5f58af761573f39f6aa3649c9deec5c4e078f5e3ca78940e4eac7",
        "urls": [
          "bzz-raw://0938c6fd92b015670a2bcf5ff971aafbc6295e07c78d1300c5e36a67002dc70c",
          "dweb:/ipfs/QmYDcxNaAAfnupwDcDN1xtQcCEXTwW1FWiaTiU3MksCQ1Z"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/IStableDebtToken.sol": {
        "keccak256": "0x964a76facf6d0ea459fd0222c5e8036efea4e9193af3851d68190052037755b4",
        "urls": [
          "bzz-raw://6eebeccfdd76a6e7691402b699c1185df09e8fe80c94cc059bd797a2931b9d3e",
          "dweb:/ipfs/QmeRY3xnu979DmjgFZSEaNgEkWgjtj4Hjpg9gW3bMoaZ1v"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/IVariableDebtToken.sol": {
        "keccak256": "0x61d5cce91604a2d97218fdf1f53022e08061aae2adc6dc5fb0ba311d46a212cc",
        "urls": [
          "bzz-raw://e8e62cce1a93aafcff2438c111ca7af77c8c2a6ed3d5c7ffce2598aa73fb87c9",
          "dweb:/ipfs/QmXXpq9J65pU5Wt9WUR1sZMjss2gUDfEvpDAc9npQfxGcC"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/configuration/ReserveConfiguration.sol": {
        "keccak256": "0xa185efd08f4a3798bbafaa90fafd310f2e29634a2f83b62ee833b31a24232e3c",
        "urls": [
          "bzz-raw://806a0ce876edbbbd418a8297735f66907a06650606b00eac5b510ab082ed3173",
          "dweb:/ipfs/QmQk5ybFrVqXfgXbndYcKBoQiahKScjFEABpJ3ATG8SYPh"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/helpers/Errors.sol": {
        "keccak256": "0x490e76871922e89a13ba0bb88977be18c143fa9d0cd9afb033744a3d81479c52",
        "urls": [
          "bzz-raw://1c409d4d1e1689d8d8f3c3e361198d20f3b6476608c5316d8e2d91f52373e8e3",
          "dweb:/ipfs/QmRZaYpxqjmBpbxb51KqswKYPSeCsU3ejbmk5E3MrMxJaM"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/logic/BorrowLogic.sol": {
        "keccak256": "0x41584979c021aca9484ecf8eed27a67dc316332b43e80b98e3bd3617b9e44e3b",
        "urls": [
          "bzz-raw://8f36478f308c11d09b48237c1cab7b070f2fa34fb5f6ed02172261a61146b5c3",
          "dweb:/ipfs/QmVfALy25gBU6RcsPTZMHRZRmRv4GjkH9zxBQ5spV69UET"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/logic/GenericLogic.sol": {
        "keccak256": "0x9613130d98e3564a9dce097f7af399afbac4dc1e54ef86e31198537c2ffc058a",
        "urls": [
          "bzz-raw://b754e6d8cad2c7fdd2a1686d56476ee2c4b450189526209787b8645ebe46542c",
          "dweb:/ipfs/QmNXRercwgggYU6SdBVtF9gD6kJqcTKrshc72gxv1nEeCd"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/logic/LiquidateLogic.sol": {
        "keccak256": "0x7761714c2c93ae6ce76502724fa678b68dabb7c680cf62b0ef6666ceacfb2c9b",
        "urls": [
          "bzz-raw://5d3ecf01ee169a1e01e4c23bc4e86bba666785e29a581fb997e11675b4f097d3",
          "dweb:/ipfs/QmfZjDj8pRJ4KDfF1cYL214nkMHSH2xgcc95sKmtYjmu3C"
        ],
        "license": "BUSL-1.1"
      },
      "src/protocol/libraries/logic/ReserveLogic.sol": {
        "keccak256": "0x62ec73dd19c9e36fd0c1a4aa4e1ca3250534010839cec91a5db5e6cadd29b556",
        "urls": [
          "bzz-raw://f28b9df77a1d72fe06db1bb03d51881084fbcbbca060c3d1ce7172d0d7cbaf34",
          "dweb:/ipfs/QmexhggWDeu7ujHKU8xvGMG3FbV45EKBqbNAHne4rLEwCP"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/logic/SupplyLogic.sol": {
        "keccak256": "0x3953a3284bbefe7cac7bc97dee696bc56850a634d985209e1203c8056b2f6e4c",
        "urls": [
          "bzz-raw://2165cba5e23d52cb3893754898014337d6df09a6cf9108cb3b0b9f10ccd3d2ad",
          "dweb:/ipfs/QmWndqB4vuysuzynxfZBmQA7uQ9fNuaKNxctMUABr47nN5"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/logic/ValidationLogic.sol": {
        "keccak256": "0x0f6512787e4c18afde885b84b1535b720f96cb7c7f6f97f4aca28f2dc610fece",
        "urls": [
          "bzz-raw://20a5522498236525fee4c1cdad99c102d9b3e809a28eef6d2d3301ec65a6e182",
          "dweb:/ipfs/QmaUwsg4jFkdmJzmtT9eRQcEXFZmJT5NRZwHRVsJTqogoD"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/math/MathUtils.sol": {
        "keccak256": "0x1c856137c4ef9d713b19a65adeb47c4490bd3b8414d7f28b364625226926779f",
        "urls": [
          "bzz-raw://15c029cd4a3becaa47c72c1f5c18986b0a3cb488d8145e0bf88ce618a3d70841",
          "dweb:/ipfs/QmSYaWpWPbEHkRCegu5edAuRS3HTwyN2mFoSKm4yfGeec9"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/math/PercentageMath.sol": {
        "keccak256": "0xb84274fc3effba81036256cf7fde67b3dbfe86c4ffd0e062711a3270157952a2",
        "urls": [
          "bzz-raw://3ecaf26e713b39d89ee21fb8bfefe55fe2fec4a2f5a2bffba7612f82182b7262",
          "dweb:/ipfs/QmZ6oXpNspwBEkiJEz1EhsU4EVBpG3anNjtzcycNEgAkfe"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/math/WadRayMath.sol": {
        "keccak256": "0xb29e8edc0e0e6bfead27945357c9e4a66e0c11e58ff3b87ee68ed1b5ca416735",
        "urls": [
          "bzz-raw://d1b4377995155f32bb6c3ba558875c617fa63601c597099d3460063ac2a15d93",
          "dweb:/ipfs/QmUvCE6Q2J62sMgQCCEbQauWSYJpMiu3QCgWa6mZnEmcK2"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/types/ConfigTypes.sol": {
        "keccak256": "0xa8f9b14d9adf738033fd1847b30012d0e022027614fd6c9bb31a01bc6bfb1634",
        "urls": [
          "bzz-raw://b20c579d1b683dd5977a675c2e46adeebd56c96faa68cda9b0767edf02a5b650",
          "dweb:/ipfs/QmPULpaX2ouktArvXJxYNVPQ9vKBhEeCYA4smo8v57qFLD"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/types/DataTypes.sol": {
        "keccak256": "0x0103c43499e5226d36906042a1723a3ee6ee18ba607cbffc9e776d4dc47edc10",
        "urls": [
          "bzz-raw://550191b44b6ddfe84d81bd5ded46e1ab3ac493399adfca3634fd8348a4a087fa",
          "dweb:/ipfs/QmeoHga9azsBkTRdnzH9USs51JduGR2tgge5YmGW8dJ2Tq"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/oracle/NFTPriceOracleStorage.sol": {
        "keccak256": "0x9847005d0c1f4d6504031346e37d421ed676afcb4711908dd3038254444088dd",
        "urls": [
          "bzz-raw://b9ef1ed0f1716aa142c1f584b5b77a7ef5b1a3ab90f1f9fbe84b146083d8dd77",
          "dweb:/ipfs/QmQCfhtqHjfQWBokhWkGdZnfVmxsCLU5QkTW1bzEUfincT"
        ],
        "license": "BUSL-1.1"
      },
      "src/protocol/oracle/Trustus.sol": {
        "keccak256": "0xf3ffd2cf22289fcdd27a05a2718ef39912ecc20e57f0578907489446c2bb8cb1",
        "urls": [
          "bzz-raw://1d0a2967648f2278b026ef458424b592b0322e08c33e629af50102c70ab205be",
          "dweb:/ipfs/QmQVWxPwCQinbZCWeJSgyDdTgrUzULxwpcxqXnPrpx3rTk"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/p2pool/LendingPool.sol": {
        "keccak256": "0xfd48ac643d7f44d95a4174052404228bb6aa7d5b735ea225b076236ae34bb301",
        "urls": [
          "bzz-raw://7af5b1a4e18efecf111d52b0c58b45f4547e4224a60a9e184281178a29880622",
          "dweb:/ipfs/QmWT7bWTHv47DHGNdt4p6FbCVAcwE3jkGm4Ay3ruo3Hu68"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/p2pool/LendingPoolStorage.sol": {
        "keccak256": "0xc31280ac99fa78654a1ba2ab8190aa1467ba0adbbc4594e01396bff7b24dc3f5",
        "urls": [
          "bzz-raw://70783c839e90b8ab5cdb6907ba60b95cb4b525ff087e760ba29b8e2f597193b1",
          "dweb:/ipfs/Qmeorb6PDCsdXJEM9kehU1pAasPxY95q6WMg4FwCyX6NCQ"
        ],
        "license": "AGPL-3.0"
      }
    },
    "version": 1
  },
  "ast": {
    "absolutePath": "src/protocol/p2pool/LendingPool.sol",
    "id": 67263,
    "exportedSymbols": {
      "BorrowLogic": [
        58413
      ],
      "ConfigTypes": [
        63649
      ],
      "ContextUpgradeable": [
        28988
      ],
      "DataTypes": [
        64253
      ],
      "Errors": [
        56900
      ],
      "IAddressProvider": [
        45420
      ],
      "ICollateralManager": [
        45758
      ],
      "IERC1155ReceiverUpgradeable": [
        26377
      ],
      "IERC165Upgradeable": [
        29293
      ],
      "IERC20": [
        33440
      ],
      "IERC721ReceiverUpgradeable": [
        28519
      ],
      "IFToken": [
        46422
      ],
      "ILendingPool": [
        47057
      ],
      "IStableDebtToken": [
        47663
      ],
      "IVariableDebtToken": [
        47771
      ],
      "Initializable": [
        26136
      ],
      "LendingPool": [
        67262
      ],
      "LendingPoolStorage": [
        67334
      ],
      "LiquidateLogic": [
        60459
      ],
      "ReentrancyGuardUpgradeable": [
        26336
      ],
      "ReserveConfiguration": [
        56503
      ],
      "ReserveLogic": [
        61316
      ],
      "SafeERC20": [
        33782
      ],
      "SafeMath": [
        36719
      ],
      "SupplyLogic": [
        61780
      ],
      "ValidationLogic": [
        62908
      ],
      "WadRayMath": [
        63459
      ]
    },
    "nodeType": "SourceUnit",
    "src": "38:26953:143",
    "nodes": [
      {
        "id": 65993,
        "nodeType": "PragmaDirective",
        "src": "38:23:143",
        "nodes": [],
        "literals": [
          "solidity",
          "0.8",
          ".16"
        ]
      },
      {
        "id": 65995,
        "nodeType": "ImportDirective",
        "src": "65:65:143",
        "nodes": [],
        "absolutePath": "src/interfaces/ILendingPool.sol",
        "file": "../../interfaces/ILendingPool.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 67263,
        "sourceUnit": 47058,
        "symbolAliases": [
          {
            "foreign": {
              "id": 65994,
              "name": "ILendingPool",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 47057,
              "src": "74:12:143",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 65997,
        "nodeType": "ImportDirective",
        "src": "132:55:143",
        "nodes": [],
        "absolutePath": "src/interfaces/IFToken.sol",
        "file": "../../interfaces/IFToken.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 67263,
        "sourceUnit": 46423,
        "symbolAliases": [
          {
            "foreign": {
              "id": 65996,
              "name": "IFToken",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 46422,
              "src": "141:7:143",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 65999,
        "nodeType": "ImportDirective",
        "src": "189:73:143",
        "nodes": [],
        "absolutePath": "src/interfaces/IStableDebtToken.sol",
        "file": "../../interfaces/IStableDebtToken.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 67263,
        "sourceUnit": 47664,
        "symbolAliases": [
          {
            "foreign": {
              "id": 65998,
              "name": "IStableDebtToken",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 47663,
              "src": "198:16:143",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 66001,
        "nodeType": "ImportDirective",
        "src": "264:77:143",
        "nodes": [],
        "absolutePath": "src/interfaces/IVariableDebtToken.sol",
        "file": "../../interfaces/IVariableDebtToken.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 67263,
        "sourceUnit": 47772,
        "symbolAliases": [
          {
            "foreign": {
              "id": 66000,
              "name": "IVariableDebtToken",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 47771,
              "src": "273:18:143",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 66003,
        "nodeType": "ImportDirective",
        "src": "343:77:143",
        "nodes": [],
        "absolutePath": "src/interfaces/ICollateralManager.sol",
        "file": "../../interfaces/ICollateralManager.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 67263,
        "sourceUnit": 45759,
        "symbolAliases": [
          {
            "foreign": {
              "id": 66002,
              "name": "ICollateralManager",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 45758,
              "src": "352:18:143",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 66005,
        "nodeType": "ImportDirective",
        "src": "422:73:143",
        "nodes": [],
        "absolutePath": "src/interfaces/IAddressProvider.sol",
        "file": "../../interfaces/IAddressProvider.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 67263,
        "sourceUnit": 45421,
        "symbolAliases": [
          {
            "foreign": {
              "id": 66004,
              "name": "IAddressProvider",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 45420,
              "src": "431:16:143",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 66007,
        "nodeType": "ImportDirective",
        "src": "499:62:143",
        "nodes": [],
        "absolutePath": "src/protocol/p2pool/LendingPoolStorage.sol",
        "file": "./LendingPoolStorage.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 67263,
        "sourceUnit": 67335,
        "symbolAliases": [
          {
            "foreign": {
              "id": 66006,
              "name": "LendingPoolStorage",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 67334,
              "src": "508:18:143",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 66009,
        "nodeType": "ImportDirective",
        "src": "565:91:143",
        "nodes": [],
        "absolutePath": "src/protocol/libraries/configuration/ReserveConfiguration.sol",
        "file": "../libraries/configuration/ReserveConfiguration.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 67263,
        "sourceUnit": 56504,
        "symbolAliases": [
          {
            "foreign": {
              "id": 66008,
              "name": "ReserveConfiguration",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 56503,
              "src": "574:20:143",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 66011,
        "nodeType": "ImportDirective",
        "src": "658:67:143",
        "nodes": [],
        "absolutePath": "src/protocol/libraries/logic/ReserveLogic.sol",
        "file": "../libraries/logic/ReserveLogic.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 67263,
        "sourceUnit": 61317,
        "symbolAliases": [
          {
            "foreign": {
              "id": 66010,
              "name": "ReserveLogic",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 61316,
              "src": "667:12:143",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 66013,
        "nodeType": "ImportDirective",
        "src": "727:65:143",
        "nodes": [],
        "absolutePath": "src/protocol/libraries/logic/SupplyLogic.sol",
        "file": "../libraries/logic/SupplyLogic.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 67263,
        "sourceUnit": 61781,
        "symbolAliases": [
          {
            "foreign": {
              "id": 66012,
              "name": "SupplyLogic",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 61780,
              "src": "736:11:143",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 66015,
        "nodeType": "ImportDirective",
        "src": "794:65:143",
        "nodes": [],
        "absolutePath": "src/protocol/libraries/logic/BorrowLogic.sol",
        "file": "../libraries/logic/BorrowLogic.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 67263,
        "sourceUnit": 58414,
        "symbolAliases": [
          {
            "foreign": {
              "id": 66014,
              "name": "BorrowLogic",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 58413,
              "src": "803:11:143",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 66017,
        "nodeType": "ImportDirective",
        "src": "861:71:143",
        "nodes": [],
        "absolutePath": "src/protocol/libraries/logic/LiquidateLogic.sol",
        "file": "../libraries/logic/LiquidateLogic.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 67263,
        "sourceUnit": 60460,
        "symbolAliases": [
          {
            "foreign": {
              "id": 66016,
              "name": "LiquidateLogic",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 60459,
              "src": "870:14:143",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 66019,
        "nodeType": "ImportDirective",
        "src": "934:73:143",
        "nodes": [],
        "absolutePath": "src/protocol/libraries/logic/ValidationLogic.sol",
        "file": "../libraries/logic/ValidationLogic.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 67263,
        "sourceUnit": 62909,
        "symbolAliases": [
          {
            "foreign": {
              "id": 66018,
              "name": "ValidationLogic",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 62908,
              "src": "943:15:143",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 66021,
        "nodeType": "ImportDirective",
        "src": "1011:65:143",
        "nodes": [],
        "absolutePath": "src/protocol/libraries/types/ConfigTypes.sol",
        "file": "../libraries/types/ConfigTypes.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 67263,
        "sourceUnit": 63650,
        "symbolAliases": [
          {
            "foreign": {
              "id": 66020,
              "name": "ConfigTypes",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 63649,
              "src": "1020:11:143",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 66023,
        "nodeType": "ImportDirective",
        "src": "1078:61:143",
        "nodes": [],
        "absolutePath": "src/protocol/libraries/types/DataTypes.sol",
        "file": "../libraries/types/DataTypes.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 67263,
        "sourceUnit": 64254,
        "symbolAliases": [
          {
            "foreign": {
              "id": 66022,
              "name": "DataTypes",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 64253,
              "src": "1087:9:143",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 66025,
        "nodeType": "ImportDirective",
        "src": "1141:57:143",
        "nodes": [],
        "absolutePath": "src/protocol/libraries/helpers/Errors.sol",
        "file": "../libraries/helpers/Errors.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 67263,
        "sourceUnit": 56901,
        "symbolAliases": [
          {
            "foreign": {
              "id": 66024,
              "name": "Errors",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 56900,
              "src": "1150:6:143",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 66027,
        "nodeType": "ImportDirective",
        "src": "1200:62:143",
        "nodes": [],
        "absolutePath": "src/protocol/libraries/math/WadRayMath.sol",
        "file": "../libraries/math/WadRayMath.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 67263,
        "sourceUnit": 63460,
        "symbolAliases": [
          {
            "foreign": {
              "id": 66026,
              "name": "WadRayMath",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 63459,
              "src": "1209:10:143",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 66029,
        "nodeType": "ImportDirective",
        "src": "1266:72:143",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol",
        "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 67263,
        "sourceUnit": 33441,
        "symbolAliases": [
          {
            "foreign": {
              "id": 66028,
              "name": "IERC20",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 33440,
              "src": "1275:6:143",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 66031,
        "nodeType": "ImportDirective",
        "src": "1340:116:143",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/IERC165Upgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/utils/introspection/IERC165Upgradeable.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 67263,
        "sourceUnit": 29294,
        "symbolAliases": [
          {
            "foreign": {
              "id": 66030,
              "name": "IERC165Upgradeable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 29293,
              "src": "1349:18:143",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 66033,
        "nodeType": "ImportDirective",
        "src": "1458:125:143",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC721/IERC721ReceiverUpgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 67263,
        "sourceUnit": 28520,
        "symbolAliases": [
          {
            "foreign": {
              "id": 66032,
              "name": "IERC721ReceiverUpgradeable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 28519,
              "src": "1467:26:143",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 66035,
        "nodeType": "ImportDirective",
        "src": "1585:128:143",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC1155/IERC1155ReceiverUpgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155ReceiverUpgradeable.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 67263,
        "sourceUnit": 26378,
        "symbolAliases": [
          {
            "foreign": {
              "id": 66034,
              "name": "IERC1155ReceiverUpgradeable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 26377,
              "src": "1594:27:143",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 66037,
        "nodeType": "ImportDirective",
        "src": "1717:84:143",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol",
        "file": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 67263,
        "sourceUnit": 33783,
        "symbolAliases": [
          {
            "foreign": {
              "id": 66036,
              "name": "SafeERC20",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 33782,
              "src": "1726:9:143",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 66039,
        "nodeType": "ImportDirective",
        "src": "1803:75:143",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol",
        "file": "@openzeppelin/contracts/utils/math/SafeMath.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 67263,
        "sourceUnit": 36720,
        "symbolAliases": [
          {
            "foreign": {
              "id": 66038,
              "name": "SafeMath",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 36719,
              "src": "1812:8:143",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 66041,
        "nodeType": "ImportDirective",
        "src": "1882:98:143",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol",
        "file": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 67263,
        "sourceUnit": 26137,
        "symbolAliases": [
          {
            "foreign": {
              "id": 66040,
              "name": "Initializable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 26136,
              "src": "1891:13:143",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 66043,
        "nodeType": "ImportDirective",
        "src": "1982:102:143",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 67263,
        "sourceUnit": 28989,
        "symbolAliases": [
          {
            "foreign": {
              "id": 66042,
              "name": "ContextUpgradeable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 28988,
              "src": "1991:18:143",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 66045,
        "nodeType": "ImportDirective",
        "src": "2086:121:143",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/security/ReentrancyGuardUpgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 67263,
        "sourceUnit": 26337,
        "symbolAliases": [
          {
            "foreign": {
              "id": 66044,
              "name": "ReentrancyGuardUpgradeable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 26336,
              "src": "2095:26:143",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 67262,
        "nodeType": "ContractDefinition",
        "src": "2499:24490:143",
        "nodes": [
          {
            "id": 66062,
            "nodeType": "UsingForDirective",
            "src": "2702:27:143",
            "nodes": [],
            "global": false,
            "libraryName": {
              "id": 66059,
              "name": "SafeERC20",
              "nameLocations": [
                "2708:9:143"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 33782,
              "src": "2708:9:143"
            },
            "typeName": {
              "id": 66061,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 66060,
                "name": "IERC20",
                "nameLocations": [
                  "2722:6:143"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 33440,
                "src": "2722:6:143"
              },
              "referencedDeclaration": 33440,
              "src": "2722:6:143",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC20_$33440",
                "typeString": "contract IERC20"
              }
            }
          },
          {
            "id": 66065,
            "nodeType": "UsingForDirective",
            "src": "2735:27:143",
            "nodes": [],
            "global": false,
            "libraryName": {
              "id": 66063,
              "name": "SafeMath",
              "nameLocations": [
                "2741:8:143"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 36719,
              "src": "2741:8:143"
            },
            "typeName": {
              "id": 66064,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "2754:7:143",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 66068,
            "nodeType": "UsingForDirective",
            "src": "2770:29:143",
            "nodes": [],
            "global": false,
            "libraryName": {
              "id": 66066,
              "name": "WadRayMath",
              "nameLocations": [
                "2776:10:143"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 63459,
              "src": "2776:10:143"
            },
            "typeName": {
              "id": 66067,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "2791:7:143",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 66072,
            "nodeType": "UsingForDirective",
            "src": "2805:41:143",
            "nodes": [],
            "global": false,
            "libraryName": {
              "id": 66069,
              "name": "ReserveLogic",
              "nameLocations": [
                "2811:12:143"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 61316,
              "src": "2811:12:143"
            },
            "typeName": {
              "id": 66071,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 66070,
                "name": "DataTypes.Reserve",
                "nameLocations": [
                  "2828:9:143",
                  "2838:7:143"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 63713,
                "src": "2828:17:143"
              },
              "referencedDeclaration": 63713,
              "src": "2828:17:143",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Reserve_$63713_storage_ptr",
                "typeString": "struct DataTypes.Reserve"
              }
            }
          },
          {
            "id": 66076,
            "nodeType": "UsingForDirective",
            "src": "2852:65:143",
            "nodes": [],
            "global": false,
            "libraryName": {
              "id": 66073,
              "name": "ReserveConfiguration",
              "nameLocations": [
                "2858:20:143"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 56503,
              "src": "2858:20:143"
            },
            "typeName": {
              "id": 66075,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 66074,
                "name": "DataTypes.ReserveConfigurationMap",
                "nameLocations": [
                  "2883:9:143",
                  "2893:23:143"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 63746,
                "src": "2883:33:143"
              },
              "referencedDeclaration": 63746,
              "src": "2883:33:143",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_ReserveConfigurationMap_$63746_storage_ptr",
                "typeString": "struct DataTypes.ReserveConfigurationMap"
              }
            }
          },
          {
            "id": 66095,
            "nodeType": "FunctionDefinition",
            "src": "3273:173:143",
            "nodes": [],
            "body": {
              "id": 66094,
              "nodeType": "Block",
              "src": "3337:109:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 66086,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 66084,
                      "name": "_maxNumberOfReserves",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67314,
                      "src": "3348:20:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "323536",
                      "id": 66085,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3371:3:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_256_by_1",
                        "typeString": "int_const 256"
                      },
                      "value": "256"
                    },
                    "src": "3348:26:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 66087,
                  "nodeType": "ExpressionStatement",
                  "src": "3348:26:143"
                },
                {
                  "expression": {
                    "id": 66092,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 66088,
                      "name": "_addressProvider",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67283,
                      "src": "3386:16:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                        "typeString": "contract IAddressProvider"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 66090,
                          "name": "addressProvider",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 66079,
                          "src": "3422:15:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 66089,
                        "name": "IAddressProvider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 45420,
                        "src": "3405:16:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IAddressProvider_$45420_$",
                          "typeString": "type(contract IAddressProvider)"
                        }
                      },
                      "id": 66091,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3405:33:143",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                        "typeString": "contract IAddressProvider"
                      }
                    },
                    "src": "3386:52:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                      "typeString": "contract IAddressProvider"
                    }
                  },
                  "id": 66093,
                  "nodeType": "ExpressionStatement",
                  "src": "3386:52:143"
                }
              ]
            },
            "documentation": {
              "id": 66077,
              "nodeType": "StructuredDocumentation",
              "src": "2925:342:143",
              "text": " @dev Function is invoked by the proxy contract when the LendingPool contract is added to the\n AddressProvider of the market.\n - Caching the address of the AddressProvider in order to reduce gas consumption\n   on subsequent operations\n @param addressProvider The address of the AddressProvider*"
            },
            "functionSelector": "c4d66de8",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 66082,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 66081,
                  "name": "initializer",
                  "nameLocations": [
                    "3325:11:143"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 26038,
                  "src": "3325:11:143"
                },
                "nodeType": "ModifierInvocation",
                "src": "3325:11:143"
              }
            ],
            "name": "initialize",
            "nameLocation": "3282:10:143",
            "parameters": {
              "id": 66080,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66079,
                  "mutability": "mutable",
                  "name": "addressProvider",
                  "nameLocation": "3301:15:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66095,
                  "src": "3293:23:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 66078,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3293:7:143",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3292:25:143"
            },
            "returnParameters": {
              "id": 66083,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3337:0:143"
            },
            "scope": 67262,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 66109,
            "nodeType": "ModifierDefinition",
            "src": "3454:124:143",
            "nodes": [],
            "body": {
              "id": 66108,
              "nodeType": "Block",
              "src": "3482:96:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 66103,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 66098,
                              "name": "_addressProvider",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 67283,
                              "src": "3501:16:143",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                                "typeString": "contract IAddressProvider"
                              }
                            },
                            "id": 66099,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "3518:15:143",
                            "memberName": "getConfigurator",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 45239,
                            "src": "3501:32:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                              "typeString": "function () view external returns (address)"
                            }
                          },
                          "id": 66100,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3501:34:143",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 66101,
                            "name": "_msgSender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              67261
                            ],
                            "referencedDeclaration": 67261,
                            "src": "3539:10:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                              "typeString": "function () view returns (address)"
                            }
                          },
                          "id": 66102,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3539:12:143",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "3501:50:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4331",
                        "id": 66104,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3553:4:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7c8a46b75fb4f22ffcb6a001d21cdfe621df9af052bfee526b19a22f3dd9d853",
                          "typeString": "literal_string \"C1\""
                        },
                        "value": "C1"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_7c8a46b75fb4f22ffcb6a001d21cdfe621df9af052bfee526b19a22f3dd9d853",
                          "typeString": "literal_string \"C1\""
                        }
                      ],
                      "id": 66097,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3493:7:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 66105,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3493:65:143",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 66106,
                  "nodeType": "ExpressionStatement",
                  "src": "3493:65:143"
                },
                {
                  "id": 66107,
                  "nodeType": "PlaceholderStatement",
                  "src": "3569:1:143"
                }
              ]
            },
            "name": "onlyConfigurator",
            "nameLocation": "3463:16:143",
            "parameters": {
              "id": 66096,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3479:2:143"
            },
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 66116,
            "nodeType": "ModifierDefinition",
            "src": "3586:72:143",
            "nodes": [],
            "body": {
              "id": 66115,
              "nodeType": "Block",
              "src": "3611:47:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 66111,
                      "name": "_whenNotPaused",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 66127,
                      "src": "3622:14:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$__$",
                        "typeString": "function () view"
                      }
                    },
                    "id": 66112,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3622:16:143",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 66113,
                  "nodeType": "ExpressionStatement",
                  "src": "3622:16:143"
                },
                {
                  "id": 66114,
                  "nodeType": "PlaceholderStatement",
                  "src": "3649:1:143"
                }
              ]
            },
            "name": "whenNotPaused",
            "nameLocation": "3595:13:143",
            "parameters": {
              "id": 66110,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3608:2:143"
            },
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 66127,
            "nodeType": "FunctionDefinition",
            "src": "3672:97:143",
            "nodes": [],
            "body": {
              "id": 66126,
              "nodeType": "Block",
              "src": "3712:57:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 66121,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "3731:8:143",
                        "subExpression": {
                          "id": 66120,
                          "name": "_paused",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 67325,
                          "src": "3732:7:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "expression": {
                          "id": 66122,
                          "name": "Errors",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 56900,
                          "src": "3741:6:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Errors_$56900_$",
                            "typeString": "type(library Errors)"
                          }
                        },
                        "id": 66123,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "3748:12:143",
                        "memberName": "LP_IS_PAUSED",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 56611,
                        "src": "3741:19:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 66119,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3723:7:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 66124,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3723:38:143",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 66125,
                  "nodeType": "ExpressionStatement",
                  "src": "3723:38:143"
                }
              ]
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_whenNotPaused",
            "nameLocation": "3681:14:143",
            "parameters": {
              "id": 66117,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3695:2:143"
            },
            "returnParameters": {
              "id": 66118,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3712:0:143"
            },
            "scope": 67262,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 66146,
            "nodeType": "FunctionDefinition",
            "src": "4161:1924:143",
            "nodes": [],
            "body": {
              "id": 66145,
              "nodeType": "Block",
              "src": "4435:1650:143",
              "nodes": [],
              "statements": []
            },
            "baseFunctions": [
              46710
            ],
            "documentation": {
              "id": 66128,
              "nodeType": "StructuredDocumentation",
              "src": "3777:378:143",
              "text": "@notice Initializes a reserve.\n @param input The init reserve input parameters.\n @param fToken The derivative fToken address.\n @param stableDebtToken The derivative stableDebtToken address.\n @param variableDebtToken The derivative variableDebtToken address.\n @dev Calls internal `_initReserve` function if modifiers are succeeded.    "
            },
            "functionSelector": "45a64925",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 66141,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 66140,
                  "name": "onlyConfigurator",
                  "nameLocations": [
                    "4385:16:143"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 66109,
                  "src": "4385:16:143"
                },
                "nodeType": "ModifierInvocation",
                "src": "4385:16:143"
              }
            ],
            "name": "initReserve",
            "nameLocation": "4170:11:143",
            "overrides": {
              "id": 66139,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4367:8:143"
            },
            "parameters": {
              "id": 66138,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66131,
                  "mutability": "mutable",
                  "name": "input",
                  "nameLocation": "4230:5:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66146,
                  "src": "4192:43:143",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_InitReserveInput_$63562_calldata_ptr",
                    "typeString": "struct ConfigTypes.InitReserveInput"
                  },
                  "typeName": {
                    "id": 66130,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 66129,
                      "name": "ConfigTypes.InitReserveInput",
                      "nameLocations": [
                        "4192:11:143",
                        "4204:16:143"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 63562,
                      "src": "4192:28:143"
                    },
                    "referencedDeclaration": 63562,
                    "src": "4192:28:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_InitReserveInput_$63562_storage_ptr",
                      "typeString": "struct ConfigTypes.InitReserveInput"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66133,
                  "mutability": "mutable",
                  "name": "fToken",
                  "nameLocation": "4254:6:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66146,
                  "src": "4246:14:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 66132,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4246:7:143",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66135,
                  "mutability": "mutable",
                  "name": "stableDebtToken",
                  "nameLocation": "4279:15:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66146,
                  "src": "4271:23:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 66134,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4271:7:143",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66137,
                  "mutability": "mutable",
                  "name": "variableDebtToken",
                  "nameLocation": "4313:17:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66146,
                  "src": "4305:25:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 66136,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4305:7:143",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4181:156:143"
            },
            "returnParameters": {
              "id": 66144,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66143,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 66146,
                  "src": "4421:7:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66142,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4421:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4420:9:143"
            },
            "scope": 67262,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 66180,
            "nodeType": "FunctionDefinition",
            "src": "6352:599:143",
            "nodes": [],
            "body": {
              "id": 66179,
              "nodeType": "Block",
              "src": "6577:374:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 66166,
                        "name": "_addressProvider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67283,
                        "src": "6629:16:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                          "typeString": "contract IAddressProvider"
                        }
                      },
                      {
                        "id": 66167,
                        "name": "_reserves",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67288,
                        "src": "6660:9:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                          "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 66170,
                              "name": "_msgSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                67261
                              ],
                              "referencedDeclaration": 67261,
                              "src": "6745:10:143",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                "typeString": "function () view returns (address)"
                              }
                            },
                            "id": 66171,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6745:12:143",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 66172,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66149,
                            "src": "6784:6:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 66173,
                            "name": "reserveId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66151,
                            "src": "6821:9:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 66174,
                            "name": "onBehalfOf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66153,
                            "src": "6861:10:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 66175,
                            "name": "referralCode",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66155,
                            "src": "6904:12:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          ],
                          "expression": {
                            "id": 66168,
                            "name": "DataTypes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 64253,
                            "src": "6684:9:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_DataTypes_$64253_$",
                              "typeString": "type(library DataTypes)"
                            }
                          },
                          "id": 66169,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "6694:20:143",
                          "memberName": "ExecuteDepositParams",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 63820,
                          "src": "6684:30:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_ExecuteDepositParams_$63820_storage_ptr_$",
                            "typeString": "type(struct DataTypes.ExecuteDepositParams storage pointer)"
                          }
                        },
                        "id": 66176,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "nameLocations": [
                          "6734:9:143",
                          "6776:6:143",
                          "6810:9:143",
                          "6849:10:143",
                          "6890:12:143"
                        ],
                        "names": [
                          "initiator",
                          "amount",
                          "reserveId",
                          "onBehalfOf",
                          "referralCode"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "6684:248:143",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ExecuteDepositParams_$63820_memory_ptr",
                          "typeString": "struct DataTypes.ExecuteDepositParams memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                          "typeString": "contract IAddressProvider"
                        },
                        {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                          "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                        },
                        {
                          "typeIdentifier": "t_struct$_ExecuteDepositParams_$63820_memory_ptr",
                          "typeString": "struct DataTypes.ExecuteDepositParams memory"
                        }
                      ],
                      "expression": {
                        "id": 66163,
                        "name": "SupplyLogic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61780,
                        "src": "6588:11:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_SupplyLogic_$61780_$",
                          "typeString": "type(library SupplyLogic)"
                        }
                      },
                      "id": 66165,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "6600:14:143",
                      "memberName": "executeDeposit",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61397,
                      "src": "6588:26:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_contract$_IAddressProvider_$45420_$_t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$_$_t_struct$_ExecuteDepositParams_$63820_memory_ptr_$returns$__$",
                        "typeString": "function (contract IAddressProvider,mapping(uint256 => struct DataTypes.Reserve storage ref),struct DataTypes.ExecuteDepositParams memory)"
                      }
                    },
                    "id": 66177,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6588:355:143",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 66178,
                  "nodeType": "ExpressionStatement",
                  "src": "6588:355:143"
                }
              ]
            },
            "baseFunctions": [
              46721
            ],
            "documentation": {
              "id": 66147,
              "nodeType": "StructuredDocumentation",
              "src": "6093:253:143",
              "text": "@notice Deposit assets into the lending pool.\n @param amount The amount of ERC20 tokens.\n @param reserveId The id of the reserve.\n @param onBehalfOf Where to credit the deposit.\n @param referralCode Any referral code."
            },
            "functionSelector": "1de8a7c2",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 66159,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 66158,
                  "name": "nonReentrant",
                  "nameLocations": [
                    "6535:12:143"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 26307,
                  "src": "6535:12:143"
                },
                "nodeType": "ModifierInvocation",
                "src": "6535:12:143"
              },
              {
                "id": 66161,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 66160,
                  "name": "whenNotPaused",
                  "nameLocations": [
                    "6557:13:143"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 66116,
                  "src": "6557:13:143"
                },
                "nodeType": "ModifierInvocation",
                "src": "6557:13:143"
              }
            ],
            "name": "deposit",
            "nameLocation": "6361:7:143",
            "overrides": {
              "id": 66157,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6517:8:143"
            },
            "parameters": {
              "id": 66156,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66149,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "6387:6:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66180,
                  "src": "6379:14:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66148,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6379:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66151,
                  "mutability": "mutable",
                  "name": "reserveId",
                  "nameLocation": "6412:9:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66180,
                  "src": "6404:17:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66150,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6404:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66153,
                  "mutability": "mutable",
                  "name": "onBehalfOf",
                  "nameLocation": "6440:10:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66180,
                  "src": "6432:18:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 66152,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6432:7:143",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66155,
                  "mutability": "mutable",
                  "name": "referralCode",
                  "nameLocation": "6468:12:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66180,
                  "src": "6461:19:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 66154,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "6461:6:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6368:119:143"
            },
            "returnParameters": {
              "id": 66162,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6577:0:143"
            },
            "scope": 67262,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 66217,
            "nodeType": "FunctionDefinition",
            "src": "6959:670:143",
            "nodes": [],
            "body": {
              "id": 66216,
              "nodeType": "Block",
              "src": "7236:393:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 66203,
                        "name": "_addressProvider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67283,
                        "src": "7293:16:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                          "typeString": "contract IAddressProvider"
                        }
                      },
                      {
                        "id": 66204,
                        "name": "_reserves",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67288,
                        "src": "7324:9:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                          "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 66207,
                              "name": "_msgSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                67261
                              ],
                              "referencedDeclaration": 67261,
                              "src": "7414:10:143",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                "typeString": "function () view returns (address)"
                              }
                            },
                            "id": 66208,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7414:12:143",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 66209,
                            "name": "amounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66183,
                            "src": "7454:7:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          {
                            "id": 66210,
                            "name": "reserveIds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66186,
                            "src": "7493:10:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          {
                            "id": 66211,
                            "name": "onBehalfOfs",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66189,
                            "src": "7536:11:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                              "typeString": "address[] calldata"
                            }
                          },
                          {
                            "id": 66212,
                            "name": "referralCodes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66192,
                            "src": "7581:13:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint16_$dyn_calldata_ptr",
                              "typeString": "uint16[] calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            },
                            {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            },
                            {
                              "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                              "typeString": "address[] calldata"
                            },
                            {
                              "typeIdentifier": "t_array$_t_uint16_$dyn_calldata_ptr",
                              "typeString": "uint16[] calldata"
                            }
                          ],
                          "expression": {
                            "id": 66205,
                            "name": "DataTypes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 64253,
                            "src": "7348:9:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_DataTypes_$64253_$",
                              "typeString": "type(library DataTypes)"
                            }
                          },
                          "id": 66206,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "7358:25:143",
                          "memberName": "ExecuteBatchDepositParams",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 63835,
                          "src": "7348:35:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_ExecuteBatchDepositParams_$63835_storage_ptr_$",
                            "typeString": "type(struct DataTypes.ExecuteBatchDepositParams storage pointer)"
                          }
                        },
                        "id": 66213,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "nameLocations": [
                          "7403:9:143",
                          "7445:7:143",
                          "7481:10:143",
                          "7523:11:143",
                          "7566:13:143"
                        ],
                        "names": [
                          "initiator",
                          "amounts",
                          "reserveIds",
                          "onBehalfOfs",
                          "referralCodes"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "7348:262:143",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ExecuteBatchDepositParams_$63835_memory_ptr",
                          "typeString": "struct DataTypes.ExecuteBatchDepositParams memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                          "typeString": "contract IAddressProvider"
                        },
                        {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                          "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                        },
                        {
                          "typeIdentifier": "t_struct$_ExecuteBatchDepositParams_$63835_memory_ptr",
                          "typeString": "struct DataTypes.ExecuteBatchDepositParams memory"
                        }
                      ],
                      "expression": {
                        "id": 66200,
                        "name": "SupplyLogic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61780,
                        "src": "7247:11:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_SupplyLogic_$61780_$",
                          "typeString": "type(library SupplyLogic)"
                        }
                      },
                      "id": 66202,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "7259:19:143",
                      "memberName": "executeBatchDeposit",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61485,
                      "src": "7247:31:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_contract$_IAddressProvider_$45420_$_t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$_$_t_struct$_ExecuteBatchDepositParams_$63835_memory_ptr_$returns$__$",
                        "typeString": "function (contract IAddressProvider,mapping(uint256 => struct DataTypes.Reserve storage ref),struct DataTypes.ExecuteBatchDepositParams memory)"
                      }
                    },
                    "id": 66214,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7247:374:143",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 66215,
                  "nodeType": "ExpressionStatement",
                  "src": "7247:374:143"
                }
              ]
            },
            "baseFunctions": [
              46736
            ],
            "functionSelector": "4b33a967",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 66196,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 66195,
                  "name": "nonReentrant",
                  "nameLocations": [
                    "7195:12:143"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 26307,
                  "src": "7195:12:143"
                },
                "nodeType": "ModifierInvocation",
                "src": "7195:12:143"
              },
              {
                "id": 66198,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 66197,
                  "name": "whenNotPaused",
                  "nameLocations": [
                    "7217:13:143"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 66116,
                  "src": "7217:13:143"
                },
                "nodeType": "ModifierInvocation",
                "src": "7217:13:143"
              }
            ],
            "name": "batchDeposit",
            "nameLocation": "6968:12:143",
            "overrides": {
              "id": 66194,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "7177:8:143"
            },
            "parameters": {
              "id": 66193,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66183,
                  "mutability": "mutable",
                  "name": "amounts",
                  "nameLocation": "7010:7:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66217,
                  "src": "6991:26:143",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 66181,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "6991:7:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 66182,
                    "nodeType": "ArrayTypeName",
                    "src": "6991:9:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66186,
                  "mutability": "mutable",
                  "name": "reserveIds",
                  "nameLocation": "7047:10:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66217,
                  "src": "7028:29:143",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 66184,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "7028:7:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 66185,
                    "nodeType": "ArrayTypeName",
                    "src": "7028:9:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66189,
                  "mutability": "mutable",
                  "name": "onBehalfOfs",
                  "nameLocation": "7087:11:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66217,
                  "src": "7068:30:143",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 66187,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "7068:7:143",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 66188,
                    "nodeType": "ArrayTypeName",
                    "src": "7068:9:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66192,
                  "mutability": "mutable",
                  "name": "referralCodes",
                  "nameLocation": "7127:13:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66217,
                  "src": "7109:31:143",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint16_$dyn_calldata_ptr",
                    "typeString": "uint16[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 66190,
                      "name": "uint16",
                      "nodeType": "ElementaryTypeName",
                      "src": "7109:6:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 66191,
                    "nodeType": "ArrayTypeName",
                    "src": "7109:8:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint16_$dyn_storage_ptr",
                      "typeString": "uint16[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6980:167:143"
            },
            "returnParameters": {
              "id": 66199,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7236:0:143"
            },
            "scope": 67262,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 66247,
            "nodeType": "FunctionDefinition",
            "src": "7969:471:143",
            "nodes": [],
            "body": {
              "id": 66246,
              "nodeType": "Block",
              "src": "8157:283:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 66235,
                        "name": "_reserves",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67288,
                        "src": "8210:9:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                          "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 66238,
                              "name": "_msgSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                67261
                              ],
                              "referencedDeclaration": 67261,
                              "src": "8296:10:143",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                "typeString": "function () view returns (address)"
                              }
                            },
                            "id": 66239,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8296:12:143",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 66240,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66220,
                            "src": "8335:6:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 66241,
                            "name": "reserveId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66222,
                            "src": "8371:9:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 66242,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66224,
                            "src": "8403:2:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 66236,
                            "name": "DataTypes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 64253,
                            "src": "8234:9:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_DataTypes_$64253_$",
                              "typeString": "type(library DataTypes)"
                            }
                          },
                          "id": 66237,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "8244:21:143",
                          "memberName": "ExecuteWithdrawParams",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 63844,
                          "src": "8234:31:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_ExecuteWithdrawParams_$63844_storage_ptr_$",
                            "typeString": "type(struct DataTypes.ExecuteWithdrawParams storage pointer)"
                          }
                        },
                        "id": 66243,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "nameLocations": [
                          "8285:9:143",
                          "8327:6:143",
                          "8360:9:143",
                          "8399:2:143"
                        ],
                        "names": [
                          "initiator",
                          "amount",
                          "reserveId",
                          "to"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "8234:187:143",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ExecuteWithdrawParams_$63844_memory_ptr",
                          "typeString": "struct DataTypes.ExecuteWithdrawParams memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                          "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                        },
                        {
                          "typeIdentifier": "t_struct$_ExecuteWithdrawParams_$63844_memory_ptr",
                          "typeString": "struct DataTypes.ExecuteWithdrawParams memory"
                        }
                      ],
                      "expression": {
                        "id": 66232,
                        "name": "SupplyLogic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61780,
                        "src": "8168:11:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_SupplyLogic_$61780_$",
                          "typeString": "type(library SupplyLogic)"
                        }
                      },
                      "id": 66234,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "8180:15:143",
                      "memberName": "executeWithdraw",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61502,
                      "src": "8168:27:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$_$_t_struct$_ExecuteWithdrawParams_$63844_memory_ptr_$returns$__$",
                        "typeString": "function (mapping(uint256 => struct DataTypes.Reserve storage ref),struct DataTypes.ExecuteWithdrawParams memory)"
                      }
                    },
                    "id": 66244,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8168:264:143",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 66245,
                  "nodeType": "ExpressionStatement",
                  "src": "8168:264:143"
                }
              ]
            },
            "baseFunctions": [
              46745
            ],
            "documentation": {
              "id": 66218,
              "nodeType": "StructuredDocumentation",
              "src": "7637:326:143",
              "text": "@notice Withdraw assets from the lending pool.\n @param amount The amount of ERC20 tokens.\n @param reserveId The reserve id.\n @param to The address that will receive the underlying, same as msg.sender if the user wants to receive to their wallet or different if the benefitiary is a different wallet"
            },
            "functionSelector": "0ad58d2f",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 66228,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 66227,
                  "name": "nonReentrant",
                  "nameLocations": [
                    "8115:12:143"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 26307,
                  "src": "8115:12:143"
                },
                "nodeType": "ModifierInvocation",
                "src": "8115:12:143"
              },
              {
                "id": 66230,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 66229,
                  "name": "whenNotPaused",
                  "nameLocations": [
                    "8137:13:143"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 66116,
                  "src": "8137:13:143"
                },
                "nodeType": "ModifierInvocation",
                "src": "8137:13:143"
              }
            ],
            "name": "withdraw",
            "nameLocation": "7978:8:143",
            "overrides": {
              "id": 66226,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "8097:8:143"
            },
            "parameters": {
              "id": 66225,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66220,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "8005:6:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66247,
                  "src": "7997:14:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66219,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7997:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66222,
                  "mutability": "mutable",
                  "name": "reserveId",
                  "nameLocation": "8030:9:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66247,
                  "src": "8022:17:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66221,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8022:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66224,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "8058:2:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66247,
                  "src": "8050:10:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 66223,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8050:7:143",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7986:81:143"
            },
            "returnParameters": {
              "id": 66231,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8157:0:143"
            },
            "scope": 67262,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 66279,
            "nodeType": "FunctionDefinition",
            "src": "8448:526:143",
            "nodes": [],
            "body": {
              "id": 66278,
              "nodeType": "Block",
              "src": "8675:299:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 66267,
                        "name": "_reserves",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67288,
                        "src": "8733:9:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                          "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 66270,
                              "name": "_msgSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                67261
                              ],
                              "referencedDeclaration": 67261,
                              "src": "8824:10:143",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                "typeString": "function () view returns (address)"
                              }
                            },
                            "id": 66271,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8824:12:143",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 66272,
                            "name": "amounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66250,
                            "src": "8864:7:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          {
                            "id": 66273,
                            "name": "reserveIds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66253,
                            "src": "8902:10:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          {
                            "id": 66274,
                            "name": "tos",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66256,
                            "src": "8936:3:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                              "typeString": "address[] calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            },
                            {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            },
                            {
                              "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                              "typeString": "address[] calldata"
                            }
                          ],
                          "expression": {
                            "id": 66268,
                            "name": "DataTypes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 64253,
                            "src": "8757:9:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_DataTypes_$64253_$",
                              "typeString": "type(library DataTypes)"
                            }
                          },
                          "id": 66269,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "8767:26:143",
                          "memberName": "ExecuteBatchWithdrawParams",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 63856,
                          "src": "8757:36:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_ExecuteBatchWithdrawParams_$63856_storage_ptr_$",
                            "typeString": "type(struct DataTypes.ExecuteBatchWithdrawParams storage pointer)"
                          }
                        },
                        "id": 66275,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "nameLocations": [
                          "8813:9:143",
                          "8855:7:143",
                          "8890:10:143",
                          "8931:3:143"
                        ],
                        "names": [
                          "initiator",
                          "amounts",
                          "reserveIds",
                          "tos"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "8757:198:143",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ExecuteBatchWithdrawParams_$63856_memory_ptr",
                          "typeString": "struct DataTypes.ExecuteBatchWithdrawParams memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                          "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                        },
                        {
                          "typeIdentifier": "t_struct$_ExecuteBatchWithdrawParams_$63856_memory_ptr",
                          "typeString": "struct DataTypes.ExecuteBatchWithdrawParams memory"
                        }
                      ],
                      "expression": {
                        "id": 66264,
                        "name": "SupplyLogic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61780,
                        "src": "8686:11:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_SupplyLogic_$61780_$",
                          "typeString": "type(library SupplyLogic)"
                        }
                      },
                      "id": 66266,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "8698:20:143",
                      "memberName": "executeBatchWithdraw",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61571,
                      "src": "8686:32:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$_$_t_struct$_ExecuteBatchWithdrawParams_$63856_memory_ptr_$returns$__$",
                        "typeString": "function (mapping(uint256 => struct DataTypes.Reserve storage ref),struct DataTypes.ExecuteBatchWithdrawParams memory)"
                      }
                    },
                    "id": 66276,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8686:280:143",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 66277,
                  "nodeType": "ExpressionStatement",
                  "src": "8686:280:143"
                }
              ]
            },
            "baseFunctions": [
              46757
            ],
            "functionSelector": "9e97a156",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 66260,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 66259,
                  "name": "nonReentrant",
                  "nameLocations": [
                    "8633:12:143"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 26307,
                  "src": "8633:12:143"
                },
                "nodeType": "ModifierInvocation",
                "src": "8633:12:143"
              },
              {
                "id": 66262,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 66261,
                  "name": "whenNotPaused",
                  "nameLocations": [
                    "8655:13:143"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 66116,
                  "src": "8655:13:143"
                },
                "nodeType": "ModifierInvocation",
                "src": "8655:13:143"
              }
            ],
            "name": "batchWithdraw",
            "nameLocation": "8457:13:143",
            "overrides": {
              "id": 66258,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "8615:8:143"
            },
            "parameters": {
              "id": 66257,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66250,
                  "mutability": "mutable",
                  "name": "amounts",
                  "nameLocation": "8500:7:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66279,
                  "src": "8481:26:143",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 66248,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "8481:7:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 66249,
                    "nodeType": "ArrayTypeName",
                    "src": "8481:9:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66253,
                  "mutability": "mutable",
                  "name": "reserveIds",
                  "nameLocation": "8537:10:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66279,
                  "src": "8518:29:143",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 66251,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "8518:7:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 66252,
                    "nodeType": "ArrayTypeName",
                    "src": "8518:9:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66256,
                  "mutability": "mutable",
                  "name": "tos",
                  "nameLocation": "8577:3:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66279,
                  "src": "8558:22:143",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 66254,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "8558:7:143",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 66255,
                    "nodeType": "ArrayTypeName",
                    "src": "8558:9:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8470:117:143"
            },
            "returnParameters": {
              "id": 66263,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8675:0:143"
            },
            "scope": 67262,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 66322,
            "nodeType": "FunctionDefinition",
            "src": "9593:790:143",
            "nodes": [],
            "body": {
              "id": 66321,
              "nodeType": "Block",
              "src": "9899:484:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 66305,
                        "name": "_addressProvider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67283,
                        "src": "9950:16:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                          "typeString": "contract IAddressProvider"
                        }
                      },
                      {
                        "id": 66306,
                        "name": "_reserves",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67288,
                        "src": "9981:9:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                          "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 66309,
                              "name": "_msgSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                67261
                              ],
                              "referencedDeclaration": 67261,
                              "src": "10065:10:143",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                "typeString": "function () view returns (address)"
                              }
                            },
                            "id": 66310,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "10065:12:143",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 66311,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66282,
                            "src": "10104:6:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 66312,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66284,
                            "src": "10138:7:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 66313,
                            "name": "tokenValue",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66286,
                            "src": "10176:10:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 66314,
                            "name": "reserveId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66288,
                            "src": "10216:9:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 66315,
                            "name": "duration",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66290,
                            "src": "10254:8:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 66316,
                            "name": "onBehalfOf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66292,
                            "src": "10293:10:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 66317,
                            "name": "referralCode",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66294,
                            "src": "10336:12:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          ],
                          "expression": {
                            "id": 66307,
                            "name": "DataTypes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 64253,
                            "src": "10005:9:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_DataTypes_$64253_$",
                              "typeString": "type(library DataTypes)"
                            }
                          },
                          "id": 66308,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "10015:19:143",
                          "memberName": "ExecuteBorrowParams",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 63873,
                          "src": "10005:29:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_ExecuteBorrowParams_$63873_storage_ptr_$",
                            "typeString": "type(struct DataTypes.ExecuteBorrowParams storage pointer)"
                          }
                        },
                        "id": 66318,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "nameLocations": [
                          "10054:9:143",
                          "10096:6:143",
                          "10129:7:143",
                          "10164:10:143",
                          "10205:9:143",
                          "10244:8:143",
                          "10281:10:143",
                          "10322:12:143"
                        ],
                        "names": [
                          "initiator",
                          "amount",
                          "tokenId",
                          "tokenValue",
                          "reserveId",
                          "duration",
                          "onBehalfOf",
                          "referralCode"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "10005:359:143",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ExecuteBorrowParams_$63873_memory_ptr",
                          "typeString": "struct DataTypes.ExecuteBorrowParams memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                          "typeString": "contract IAddressProvider"
                        },
                        {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                          "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                        },
                        {
                          "typeIdentifier": "t_struct$_ExecuteBorrowParams_$63873_memory_ptr",
                          "typeString": "struct DataTypes.ExecuteBorrowParams memory"
                        }
                      ],
                      "expression": {
                        "id": 66302,
                        "name": "BorrowLogic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 58413,
                        "src": "9910:11:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_BorrowLogic_$58413_$",
                          "typeString": "type(library BorrowLogic)"
                        }
                      },
                      "id": 66304,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "9922:13:143",
                      "memberName": "executeBorrow",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 57119,
                      "src": "9910:25:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_contract$_IAddressProvider_$45420_$_t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$_$_t_struct$_ExecuteBorrowParams_$63873_memory_ptr_$returns$__$",
                        "typeString": "function (contract IAddressProvider,mapping(uint256 => struct DataTypes.Reserve storage ref),struct DataTypes.ExecuteBorrowParams memory)"
                      }
                    },
                    "id": 66319,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9910:465:143",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 66320,
                  "nodeType": "ExpressionStatement",
                  "src": "9910:465:143"
                }
              ]
            },
            "baseFunctions": [
              46774
            ],
            "documentation": {
              "id": 66280,
              "nodeType": "StructuredDocumentation",
              "src": "8982:605:143",
              "text": "@notice External function to create a borrow position.\n @param amount The amount of ERC20 tokens to be borrowed.\n @param tokenId The tokenId of the ERC721 / ERC1155 token to be deposited. \n @param tokenValue The number of same-value tokens supplied (0 implies ERC721)\n @param reserveId The id of the reserve to borrow against. \n @param duration The duration of the loan, 0 if open-ended\n @param onBehalfOf The address to receive the loan.\n @param referralCode Code used to register the integrator originated the operation, for potential rewards."
            },
            "functionSelector": "9c74daf8",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 66298,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 66297,
                  "name": "nonReentrant",
                  "nameLocations": [
                    "9858:12:143"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 26307,
                  "src": "9858:12:143"
                },
                "nodeType": "ModifierInvocation",
                "src": "9858:12:143"
              },
              {
                "id": 66300,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 66299,
                  "name": "whenNotPaused",
                  "nameLocations": [
                    "9880:13:143"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 66116,
                  "src": "9880:13:143"
                },
                "nodeType": "ModifierInvocation",
                "src": "9880:13:143"
              }
            ],
            "name": "borrow",
            "nameLocation": "9602:6:143",
            "overrides": {
              "id": 66296,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "9840:8:143"
            },
            "parameters": {
              "id": 66295,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66282,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "9627:6:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66322,
                  "src": "9619:14:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66281,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9619:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66284,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "9653:7:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66322,
                  "src": "9645:15:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66283,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9645:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66286,
                  "mutability": "mutable",
                  "name": "tokenValue",
                  "nameLocation": "9679:10:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66322,
                  "src": "9671:18:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66285,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9671:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66288,
                  "mutability": "mutable",
                  "name": "reserveId",
                  "nameLocation": "9708:9:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66322,
                  "src": "9700:17:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66287,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9700:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66290,
                  "mutability": "mutable",
                  "name": "duration",
                  "nameLocation": "9736:8:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66322,
                  "src": "9728:16:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66289,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9728:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66292,
                  "mutability": "mutable",
                  "name": "onBehalfOf",
                  "nameLocation": "9763:10:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66322,
                  "src": "9755:18:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 66291,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9755:7:143",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66294,
                  "mutability": "mutable",
                  "name": "referralCode",
                  "nameLocation": "9791:12:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66322,
                  "src": "9784:19:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 66293,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "9784:6:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9608:202:143"
            },
            "returnParameters": {
              "id": 66301,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9899:0:143"
            },
            "scope": 67262,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 66376,
            "nodeType": "FunctionDefinition",
            "src": "10475:896:143",
            "nodes": [],
            "body": {
              "id": 66375,
              "nodeType": "Block",
              "src": "10832:539:143",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    66353
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 66353,
                      "mutability": "mutable",
                      "name": "params",
                      "nameLocation": "10885:6:143",
                      "nodeType": "VariableDeclaration",
                      "scope": 66375,
                      "src": "10843:48:143",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ExecuteBatchBorrowParams_$63894_memory_ptr",
                        "typeString": "struct DataTypes.ExecuteBatchBorrowParams"
                      },
                      "typeName": {
                        "id": 66352,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 66351,
                          "name": "DataTypes.ExecuteBatchBorrowParams",
                          "nameLocations": [
                            "10843:9:143",
                            "10853:24:143"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 63894,
                          "src": "10843:34:143"
                        },
                        "referencedDeclaration": 63894,
                        "src": "10843:34:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ExecuteBatchBorrowParams_$63894_storage_ptr",
                          "typeString": "struct DataTypes.ExecuteBatchBorrowParams"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 66366,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 66356,
                          "name": "_msgSender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            67261
                          ],
                          "referencedDeclaration": 67261,
                          "src": "10955:10:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                            "typeString": "function () view returns (address)"
                          }
                        },
                        "id": 66357,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10955:12:143",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 66358,
                        "name": "amounts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 66326,
                        "src": "10991:7:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      {
                        "id": 66359,
                        "name": "tokenIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 66329,
                        "src": "11023:8:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      {
                        "id": 66360,
                        "name": "tokenValues",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 66332,
                        "src": "11059:11:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      {
                        "id": 66361,
                        "name": "reserveIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 66335,
                        "src": "11097:10:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      {
                        "id": 66362,
                        "name": "duration",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 66337,
                        "src": "11132:8:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 66363,
                        "name": "onBehalfOf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 66339,
                        "src": "11167:10:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 66364,
                        "name": "referralCode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 66341,
                        "src": "11206:12:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      ],
                      "expression": {
                        "id": 66354,
                        "name": "DataTypes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 64253,
                        "src": "10894:9:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_DataTypes_$64253_$",
                          "typeString": "type(library DataTypes)"
                        }
                      },
                      "id": 66355,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "10904:24:143",
                      "memberName": "ExecuteBatchBorrowParams",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 63894,
                      "src": "10894:34:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_ExecuteBatchBorrowParams_$63894_storage_ptr_$",
                        "typeString": "type(struct DataTypes.ExecuteBatchBorrowParams storage pointer)"
                      }
                    },
                    "id": 66365,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "nameLocations": [
                      "10944:9:143",
                      "10982:7:143",
                      "11013:8:143",
                      "11046:11:143",
                      "11085:10:143",
                      "11122:8:143",
                      "11155:10:143",
                      "11192:12:143"
                    ],
                    "names": [
                      "initiator",
                      "amounts",
                      "tokenIds",
                      "tokenValues",
                      "reserveIds",
                      "duration",
                      "onBehalfOf",
                      "referralCode"
                    ],
                    "nodeType": "FunctionCall",
                    "src": "10894:339:143",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ExecuteBatchBorrowParams_$63894_memory_ptr",
                      "typeString": "struct DataTypes.ExecuteBatchBorrowParams memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10843:390:143"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 66370,
                        "name": "_addressProvider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67283,
                        "src": "11291:16:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                          "typeString": "contract IAddressProvider"
                        }
                      },
                      {
                        "id": 66371,
                        "name": "_reserves",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67288,
                        "src": "11322:9:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                          "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                        }
                      },
                      {
                        "id": 66372,
                        "name": "params",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 66353,
                        "src": "11346:6:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ExecuteBatchBorrowParams_$63894_memory_ptr",
                          "typeString": "struct DataTypes.ExecuteBatchBorrowParams memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                          "typeString": "contract IAddressProvider"
                        },
                        {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                          "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                        },
                        {
                          "typeIdentifier": "t_struct$_ExecuteBatchBorrowParams_$63894_memory_ptr",
                          "typeString": "struct DataTypes.ExecuteBatchBorrowParams memory"
                        }
                      ],
                      "expression": {
                        "id": 66367,
                        "name": "BorrowLogic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 58413,
                        "src": "11246:11:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_BorrowLogic_$58413_$",
                          "typeString": "type(library BorrowLogic)"
                        }
                      },
                      "id": 66369,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "11258:18:143",
                      "memberName": "executeBatchBorrow",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 57213,
                      "src": "11246:30:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_contract$_IAddressProvider_$45420_$_t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$_$_t_struct$_ExecuteBatchBorrowParams_$63894_memory_ptr_$returns$__$",
                        "typeString": "function (contract IAddressProvider,mapping(uint256 => struct DataTypes.Reserve storage ref),struct DataTypes.ExecuteBatchBorrowParams memory)"
                      }
                    },
                    "id": 66373,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11246:117:143",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 66374,
                  "nodeType": "ExpressionStatement",
                  "src": "11246:117:143"
                }
              ]
            },
            "baseFunctions": [
              46795
            ],
            "documentation": {
              "id": 66323,
              "nodeType": "StructuredDocumentation",
              "src": "10391:78:143",
              "text": "@dev Stack too deep to be able to be able to pass arrays for all variables"
            },
            "functionSelector": "c28cadf7",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 66345,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 66344,
                  "name": "nonReentrant",
                  "nameLocations": [
                    "10791:12:143"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 26307,
                  "src": "10791:12:143"
                },
                "nodeType": "ModifierInvocation",
                "src": "10791:12:143"
              },
              {
                "id": 66347,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 66346,
                  "name": "whenNotPaused",
                  "nameLocations": [
                    "10813:13:143"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 66116,
                  "src": "10813:13:143"
                },
                "nodeType": "ModifierInvocation",
                "src": "10813:13:143"
              }
            ],
            "name": "batchBorrow",
            "nameLocation": "10484:11:143",
            "overrides": {
              "id": 66343,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "10773:8:143"
            },
            "parameters": {
              "id": 66342,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66326,
                  "mutability": "mutable",
                  "name": "amounts",
                  "nameLocation": "10525:7:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66376,
                  "src": "10506:26:143",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 66324,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "10506:7:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 66325,
                    "nodeType": "ArrayTypeName",
                    "src": "10506:9:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66329,
                  "mutability": "mutable",
                  "name": "tokenIds",
                  "nameLocation": "10562:8:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66376,
                  "src": "10543:27:143",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 66327,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "10543:7:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 66328,
                    "nodeType": "ArrayTypeName",
                    "src": "10543:9:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66332,
                  "mutability": "mutable",
                  "name": "tokenValues",
                  "nameLocation": "10600:11:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66376,
                  "src": "10581:30:143",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 66330,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "10581:7:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 66331,
                    "nodeType": "ArrayTypeName",
                    "src": "10581:9:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66335,
                  "mutability": "mutable",
                  "name": "reserveIds",
                  "nameLocation": "10641:10:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66376,
                  "src": "10622:29:143",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 66333,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "10622:7:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 66334,
                    "nodeType": "ArrayTypeName",
                    "src": "10622:9:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66337,
                  "mutability": "mutable",
                  "name": "duration",
                  "nameLocation": "10670:8:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66376,
                  "src": "10662:16:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66336,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10662:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66339,
                  "mutability": "mutable",
                  "name": "onBehalfOf",
                  "nameLocation": "10697:10:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66376,
                  "src": "10689:18:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 66338,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10689:7:143",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66341,
                  "mutability": "mutable",
                  "name": "referralCode",
                  "nameLocation": "10725:12:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66376,
                  "src": "10718:19:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 66340,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "10718:6:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10495:249:143"
            },
            "returnParameters": {
              "id": 66348,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10832:0:143"
            },
            "scope": 67262,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 66404,
            "nodeType": "FunctionDefinition",
            "src": "11544:443:143",
            "nodes": [],
            "body": {
              "id": 66403,
              "nodeType": "Block",
              "src": "11706:281:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 66392,
                        "name": "_addressProvider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67283,
                        "src": "11756:16:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                          "typeString": "contract IAddressProvider"
                        }
                      },
                      {
                        "id": 66393,
                        "name": "_reserves",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67288,
                        "src": "11787:9:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                          "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 66396,
                              "name": "_msgSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                67261
                              ],
                              "referencedDeclaration": 67261,
                              "src": "11870:10:143",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                "typeString": "function () view returns (address)"
                              }
                            },
                            "id": 66397,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "11870:12:143",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 66398,
                            "name": "borrowId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66379,
                            "src": "11911:8:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 66399,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66381,
                            "src": "11946:6:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 66394,
                            "name": "DataTypes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 64253,
                            "src": "11811:9:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_DataTypes_$64253_$",
                              "typeString": "type(library DataTypes)"
                            }
                          },
                          "id": 66395,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "11821:18:143",
                          "memberName": "ExecuteRepayParams",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 63901,
                          "src": "11811:28:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_ExecuteRepayParams_$63901_storage_ptr_$",
                            "typeString": "type(struct DataTypes.ExecuteRepayParams storage pointer)"
                          }
                        },
                        "id": 66400,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "nameLocations": [
                          "11859:9:143",
                          "11901:8:143",
                          "11938:6:143"
                        ],
                        "names": [
                          "initiator",
                          "borrowId",
                          "amount"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "11811:157:143",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ExecuteRepayParams_$63901_memory_ptr",
                          "typeString": "struct DataTypes.ExecuteRepayParams memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                          "typeString": "contract IAddressProvider"
                        },
                        {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                          "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                        },
                        {
                          "typeIdentifier": "t_struct$_ExecuteRepayParams_$63901_memory_ptr",
                          "typeString": "struct DataTypes.ExecuteRepayParams memory"
                        }
                      ],
                      "expression": {
                        "id": 66389,
                        "name": "BorrowLogic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 58413,
                        "src": "11717:11:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_BorrowLogic_$58413_$",
                          "typeString": "type(library BorrowLogic)"
                        }
                      },
                      "id": 66391,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "11729:12:143",
                      "memberName": "executeRepay",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 57234,
                      "src": "11717:24:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_contract$_IAddressProvider_$45420_$_t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$_$_t_struct$_ExecuteRepayParams_$63901_memory_ptr_$returns$__$",
                        "typeString": "function (contract IAddressProvider,mapping(uint256 => struct DataTypes.Reserve storage ref),struct DataTypes.ExecuteRepayParams memory)"
                      }
                    },
                    "id": 66401,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11717:262:143",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 66402,
                  "nodeType": "ExpressionStatement",
                  "src": "11717:262:143"
                }
              ]
            },
            "baseFunctions": [
              46802
            ],
            "documentation": {
              "id": 66377,
              "nodeType": "StructuredDocumentation",
              "src": "11379:159:143",
              "text": "@notice To repay a borrow position.\n @param borrowId The id of the borrow to repay.\n @param amount The amount of ERC20 tokens to be repaid."
            },
            "functionSelector": "d8aed145",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 66385,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 66384,
                  "name": "nonReentrant",
                  "nameLocations": [
                    "11665:12:143"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 26307,
                  "src": "11665:12:143"
                },
                "nodeType": "ModifierInvocation",
                "src": "11665:12:143"
              },
              {
                "id": 66387,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 66386,
                  "name": "whenNotPaused",
                  "nameLocations": [
                    "11687:13:143"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 66116,
                  "src": "11687:13:143"
                },
                "nodeType": "ModifierInvocation",
                "src": "11687:13:143"
              }
            ],
            "name": "repay",
            "nameLocation": "11553:5:143",
            "overrides": {
              "id": 66383,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "11647:8:143"
            },
            "parameters": {
              "id": 66382,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66379,
                  "mutability": "mutable",
                  "name": "borrowId",
                  "nameLocation": "11577:8:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66404,
                  "src": "11569:16:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66378,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11569:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66381,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "11604:6:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66404,
                  "src": "11596:14:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66380,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11596:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11558:59:143"
            },
            "returnParameters": {
              "id": 66388,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11706:0:143"
            },
            "scope": 67262,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 66433,
            "nodeType": "FunctionDefinition",
            "src": "11995:487:143",
            "nodes": [],
            "body": {
              "id": 66432,
              "nodeType": "Block",
              "src": "12185:297:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 66421,
                        "name": "_addressProvider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67283,
                        "src": "12240:16:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                          "typeString": "contract IAddressProvider"
                        }
                      },
                      {
                        "id": 66422,
                        "name": "_reserves",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67288,
                        "src": "12271:9:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                          "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 66425,
                              "name": "_msgSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                67261
                              ],
                              "referencedDeclaration": 67261,
                              "src": "12359:10:143",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                "typeString": "function () view returns (address)"
                              }
                            },
                            "id": 66426,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "12359:12:143",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 66427,
                            "name": "borrowIds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66407,
                            "src": "12401:9:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          {
                            "id": 66428,
                            "name": "amounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66410,
                            "src": "12438:7:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            },
                            {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          ],
                          "expression": {
                            "id": 66423,
                            "name": "DataTypes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 64253,
                            "src": "12295:9:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_DataTypes_$64253_$",
                              "typeString": "type(library DataTypes)"
                            }
                          },
                          "id": 66424,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "12305:23:143",
                          "memberName": "ExecuteBatchRepayParams",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 63910,
                          "src": "12295:33:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_ExecuteBatchRepayParams_$63910_storage_ptr_$",
                            "typeString": "type(struct DataTypes.ExecuteBatchRepayParams storage pointer)"
                          }
                        },
                        "id": 66429,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "nameLocations": [
                          "12348:9:143",
                          "12390:9:143",
                          "12429:7:143"
                        ],
                        "names": [
                          "initiator",
                          "borrowIds",
                          "amounts"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "12295:168:143",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ExecuteBatchRepayParams_$63910_memory_ptr",
                          "typeString": "struct DataTypes.ExecuteBatchRepayParams memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                          "typeString": "contract IAddressProvider"
                        },
                        {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                          "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                        },
                        {
                          "typeIdentifier": "t_struct$_ExecuteBatchRepayParams_$63910_memory_ptr",
                          "typeString": "struct DataTypes.ExecuteBatchRepayParams memory"
                        }
                      ],
                      "expression": {
                        "id": 66418,
                        "name": "BorrowLogic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 58413,
                        "src": "12196:11:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_BorrowLogic_$58413_$",
                          "typeString": "type(library BorrowLogic)"
                        }
                      },
                      "id": 66420,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "12208:17:143",
                      "memberName": "executeBatchRepay",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 57292,
                      "src": "12196:29:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_contract$_IAddressProvider_$45420_$_t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$_$_t_struct$_ExecuteBatchRepayParams_$63910_memory_ptr_$returns$__$",
                        "typeString": "function (contract IAddressProvider,mapping(uint256 => struct DataTypes.Reserve storage ref),struct DataTypes.ExecuteBatchRepayParams memory)"
                      }
                    },
                    "id": 66430,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12196:278:143",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 66431,
                  "nodeType": "ExpressionStatement",
                  "src": "12196:278:143"
                }
              ]
            },
            "baseFunctions": [
              46811
            ],
            "functionSelector": "ff7039c7",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 66414,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 66413,
                  "name": "nonReentrant",
                  "nameLocations": [
                    "12144:12:143"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 26307,
                  "src": "12144:12:143"
                },
                "nodeType": "ModifierInvocation",
                "src": "12144:12:143"
              },
              {
                "id": 66416,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 66415,
                  "name": "whenNotPaused",
                  "nameLocations": [
                    "12166:13:143"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 66116,
                  "src": "12166:13:143"
                },
                "nodeType": "ModifierInvocation",
                "src": "12166:13:143"
              }
            ],
            "name": "batchRepay",
            "nameLocation": "12004:10:143",
            "overrides": {
              "id": 66412,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "12126:8:143"
            },
            "parameters": {
              "id": 66411,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66407,
                  "mutability": "mutable",
                  "name": "borrowIds",
                  "nameLocation": "12044:9:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66433,
                  "src": "12025:28:143",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 66405,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "12025:7:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 66406,
                    "nodeType": "ArrayTypeName",
                    "src": "12025:9:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66410,
                  "mutability": "mutable",
                  "name": "amounts",
                  "nameLocation": "12083:7:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66433,
                  "src": "12064:26:143",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 66408,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "12064:7:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 66409,
                    "nodeType": "ArrayTypeName",
                    "src": "12064:9:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12014:83:143"
            },
            "returnParameters": {
              "id": 66417,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12185:0:143"
            },
            "scope": 67262,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 66463,
            "nodeType": "FunctionDefinition",
            "src": "12490:517:143",
            "nodes": [],
            "body": {
              "id": 66462,
              "nodeType": "Block",
              "src": "12681:326:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 66450,
                        "name": "_addressProvider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67283,
                        "src": "12735:16:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                          "typeString": "contract IAddressProvider"
                        }
                      },
                      {
                        "id": 66451,
                        "name": "_reserves",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67288,
                        "src": "12766:9:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                          "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 66454,
                              "name": "_msgSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                67261
                              ],
                              "referencedDeclaration": 67261,
                              "src": "12853:10:143",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                "typeString": "function () view returns (address)"
                              }
                            },
                            "id": 66455,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "12853:12:143",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 66456,
                            "name": "borrowId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66435,
                            "src": "12894:8:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 66457,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66437,
                            "src": "12929:6:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 66458,
                            "name": "duration",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66439,
                            "src": "12964:8:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 66452,
                            "name": "DataTypes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 64253,
                            "src": "12790:9:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_DataTypes_$64253_$",
                              "typeString": "type(library DataTypes)"
                            }
                          },
                          "id": 66453,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "12800:22:143",
                          "memberName": "ExecuteRefinanceParams",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 63919,
                          "src": "12790:32:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_ExecuteRefinanceParams_$63919_storage_ptr_$",
                            "typeString": "type(struct DataTypes.ExecuteRefinanceParams storage pointer)"
                          }
                        },
                        "id": 66459,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "nameLocations": [
                          "12842:9:143",
                          "12884:8:143",
                          "12921:6:143",
                          "12954:8:143"
                        ],
                        "names": [
                          "initiator",
                          "borrowId",
                          "amount",
                          "duration"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "12790:198:143",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ExecuteRefinanceParams_$63919_memory_ptr",
                          "typeString": "struct DataTypes.ExecuteRefinanceParams memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                          "typeString": "contract IAddressProvider"
                        },
                        {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                          "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                        },
                        {
                          "typeIdentifier": "t_struct$_ExecuteRefinanceParams_$63919_memory_ptr",
                          "typeString": "struct DataTypes.ExecuteRefinanceParams memory"
                        }
                      ],
                      "expression": {
                        "id": 66447,
                        "name": "BorrowLogic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 58413,
                        "src": "12692:11:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_BorrowLogic_$58413_$",
                          "typeString": "type(library BorrowLogic)"
                        }
                      },
                      "id": 66449,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "12704:16:143",
                      "memberName": "executeRefinance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 57313,
                      "src": "12692:28:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_contract$_IAddressProvider_$45420_$_t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$_$_t_struct$_ExecuteRefinanceParams_$63919_memory_ptr_$returns$__$",
                        "typeString": "function (contract IAddressProvider,mapping(uint256 => struct DataTypes.Reserve storage ref),struct DataTypes.ExecuteRefinanceParams memory)"
                      }
                    },
                    "id": 66460,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12692:307:143",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 66461,
                  "nodeType": "ExpressionStatement",
                  "src": "12692:307:143"
                }
              ]
            },
            "baseFunctions": [
              46820
            ],
            "functionSelector": "044df1f2",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 66443,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 66442,
                  "name": "nonReentrant",
                  "nameLocations": [
                    "12640:12:143"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 26307,
                  "src": "12640:12:143"
                },
                "nodeType": "ModifierInvocation",
                "src": "12640:12:143"
              },
              {
                "id": 66445,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 66444,
                  "name": "whenNotPaused",
                  "nameLocations": [
                    "12662:13:143"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 66116,
                  "src": "12662:13:143"
                },
                "nodeType": "ModifierInvocation",
                "src": "12662:13:143"
              }
            ],
            "name": "refinance",
            "nameLocation": "12499:9:143",
            "overrides": {
              "id": 66441,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "12622:8:143"
            },
            "parameters": {
              "id": 66440,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66435,
                  "mutability": "mutable",
                  "name": "borrowId",
                  "nameLocation": "12527:8:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66463,
                  "src": "12519:16:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66434,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12519:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66437,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "12554:6:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66463,
                  "src": "12546:14:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66436,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12546:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66439,
                  "mutability": "mutable",
                  "name": "duration",
                  "nameLocation": "12579:8:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66463,
                  "src": "12571:16:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66438,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12571:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12508:86:143"
            },
            "returnParameters": {
              "id": 66446,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12681:0:143"
            },
            "scope": 67262,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 66496,
            "nodeType": "FunctionDefinition",
            "src": "13015:574:143",
            "nodes": [],
            "body": {
              "id": 66495,
              "nodeType": "Block",
              "src": "13247:342:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 66483,
                        "name": "_addressProvider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67283,
                        "src": "13306:16:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                          "typeString": "contract IAddressProvider"
                        }
                      },
                      {
                        "id": 66484,
                        "name": "_reserves",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67288,
                        "src": "13337:9:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                          "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 66487,
                              "name": "_msgSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                67261
                              ],
                              "referencedDeclaration": 67261,
                              "src": "13429:10:143",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                "typeString": "function () view returns (address)"
                              }
                            },
                            "id": 66488,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "13429:12:143",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 66489,
                            "name": "borrowIds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66466,
                            "src": "13471:9:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          {
                            "id": 66490,
                            "name": "amounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66469,
                            "src": "13508:7:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          {
                            "id": 66491,
                            "name": "durations",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66472,
                            "src": "13545:9:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            },
                            {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            },
                            {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          ],
                          "expression": {
                            "id": 66485,
                            "name": "DataTypes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 64253,
                            "src": "13361:9:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_DataTypes_$64253_$",
                              "typeString": "type(library DataTypes)"
                            }
                          },
                          "id": 66486,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "13371:27:143",
                          "memberName": "ExecuteBatchRefinanceParams",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 63931,
                          "src": "13361:37:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_ExecuteBatchRefinanceParams_$63931_storage_ptr_$",
                            "typeString": "type(struct DataTypes.ExecuteBatchRefinanceParams storage pointer)"
                          }
                        },
                        "id": 66492,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "nameLocations": [
                          "13418:9:143",
                          "13460:9:143",
                          "13499:7:143",
                          "13534:9:143"
                        ],
                        "names": [
                          "initiator",
                          "borrowIds",
                          "amounts",
                          "durations"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "13361:209:143",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ExecuteBatchRefinanceParams_$63931_memory_ptr",
                          "typeString": "struct DataTypes.ExecuteBatchRefinanceParams memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                          "typeString": "contract IAddressProvider"
                        },
                        {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                          "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                        },
                        {
                          "typeIdentifier": "t_struct$_ExecuteBatchRefinanceParams_$63931_memory_ptr",
                          "typeString": "struct DataTypes.ExecuteBatchRefinanceParams memory"
                        }
                      ],
                      "expression": {
                        "id": 66480,
                        "name": "BorrowLogic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 58413,
                        "src": "13258:11:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_BorrowLogic_$58413_$",
                          "typeString": "type(library BorrowLogic)"
                        }
                      },
                      "id": 66482,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "13270:21:143",
                      "memberName": "executeBatchRefinance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 57386,
                      "src": "13258:33:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_contract$_IAddressProvider_$45420_$_t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$_$_t_struct$_ExecuteBatchRefinanceParams_$63931_memory_ptr_$returns$__$",
                        "typeString": "function (contract IAddressProvider,mapping(uint256 => struct DataTypes.Reserve storage ref),struct DataTypes.ExecuteBatchRefinanceParams memory)"
                      }
                    },
                    "id": 66493,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13258:323:143",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 66494,
                  "nodeType": "ExpressionStatement",
                  "src": "13258:323:143"
                }
              ]
            },
            "baseFunctions": [
              46832
            ],
            "functionSelector": "621759de",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 66476,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 66475,
                  "name": "nonReentrant",
                  "nameLocations": [
                    "13206:12:143"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 26307,
                  "src": "13206:12:143"
                },
                "nodeType": "ModifierInvocation",
                "src": "13206:12:143"
              },
              {
                "id": 66478,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 66477,
                  "name": "whenNotPaused",
                  "nameLocations": [
                    "13228:13:143"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 66116,
                  "src": "13228:13:143"
                },
                "nodeType": "ModifierInvocation",
                "src": "13228:13:143"
              }
            ],
            "name": "batchRefinance",
            "nameLocation": "13024:14:143",
            "overrides": {
              "id": 66474,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "13188:8:143"
            },
            "parameters": {
              "id": 66473,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66466,
                  "mutability": "mutable",
                  "name": "borrowIds",
                  "nameLocation": "13068:9:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66496,
                  "src": "13049:28:143",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 66464,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "13049:7:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 66465,
                    "nodeType": "ArrayTypeName",
                    "src": "13049:9:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66469,
                  "mutability": "mutable",
                  "name": "amounts",
                  "nameLocation": "13107:7:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66496,
                  "src": "13088:26:143",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 66467,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "13088:7:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 66468,
                    "nodeType": "ArrayTypeName",
                    "src": "13088:9:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66472,
                  "mutability": "mutable",
                  "name": "durations",
                  "nameLocation": "13144:9:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66496,
                  "src": "13125:28:143",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 66470,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "13125:7:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 66471,
                    "nodeType": "ArrayTypeName",
                    "src": "13125:9:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13038:122:143"
            },
            "returnParameters": {
              "id": 66479,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13247:0:143"
            },
            "scope": 67262,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 66524,
            "nodeType": "FunctionDefinition",
            "src": "13767:463:143",
            "nodes": [],
            "body": {
              "id": 66523,
              "nodeType": "Block",
              "src": "13934:296:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 66512,
                        "name": "_addressProvider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67283,
                        "src": "13989:16:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                          "typeString": "contract IAddressProvider"
                        }
                      },
                      {
                        "id": 66513,
                        "name": "_reserves",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67288,
                        "src": "14020:9:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                          "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 66516,
                              "name": "_msgSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                67261
                              ],
                              "referencedDeclaration": 67261,
                              "src": "14105:10:143",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                "typeString": "function () view returns (address)"
                              }
                            },
                            "id": 66517,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14105:12:143",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 66518,
                            "name": "borrowId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66499,
                            "src": "14146:8:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 66519,
                            "name": "onBehalfOf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66501,
                            "src": "14185:10:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 66514,
                            "name": "DataTypes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 64253,
                            "src": "14044:9:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_DataTypes_$64253_$",
                              "typeString": "type(library DataTypes)"
                            }
                          },
                          "id": 66515,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "14054:20:143",
                          "memberName": "ExecuteAuctionParams",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 63938,
                          "src": "14044:30:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_ExecuteAuctionParams_$63938_storage_ptr_$",
                            "typeString": "type(struct DataTypes.ExecuteAuctionParams storage pointer)"
                          }
                        },
                        "id": 66520,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "nameLocations": [
                          "14094:9:143",
                          "14136:8:143",
                          "14173:10:143"
                        ],
                        "names": [
                          "initiator",
                          "borrowId",
                          "onBehalfOf"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "14044:167:143",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ExecuteAuctionParams_$63938_memory_ptr",
                          "typeString": "struct DataTypes.ExecuteAuctionParams memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                          "typeString": "contract IAddressProvider"
                        },
                        {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                          "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                        },
                        {
                          "typeIdentifier": "t_struct$_ExecuteAuctionParams_$63938_memory_ptr",
                          "typeString": "struct DataTypes.ExecuteAuctionParams memory"
                        }
                      ],
                      "expression": {
                        "id": 66509,
                        "name": "LiquidateLogic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 60459,
                        "src": "13945:14:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_LiquidateLogic_$60459_$",
                          "typeString": "type(library LiquidateLogic)"
                        }
                      },
                      "id": 66511,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "13960:14:143",
                      "memberName": "executeAuction",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 59677,
                      "src": "13945:29:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_contract$_IAddressProvider_$45420_$_t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$_$_t_struct$_ExecuteAuctionParams_$63938_memory_ptr_$returns$__$",
                        "typeString": "function (contract IAddressProvider,mapping(uint256 => struct DataTypes.Reserve storage ref),struct DataTypes.ExecuteAuctionParams memory)"
                      }
                    },
                    "id": 66521,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13945:277:143",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 66522,
                  "nodeType": "ExpressionStatement",
                  "src": "13945:277:143"
                }
              ]
            },
            "baseFunctions": [
              46839
            ],
            "documentation": {
              "id": 66497,
              "nodeType": "StructuredDocumentation",
              "src": "13597:164:143",
              "text": "@notice To trigger a liquidation auction\n @param borrowId The id of the borrow.\n @param onBehalfOf The wallet to receive the auction caller fee."
            },
            "functionSelector": "118cfad3",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 66505,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 66504,
                  "name": "nonReentrant",
                  "nameLocations": [
                    "13893:12:143"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 26307,
                  "src": "13893:12:143"
                },
                "nodeType": "ModifierInvocation",
                "src": "13893:12:143"
              },
              {
                "id": 66507,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 66506,
                  "name": "whenNotPaused",
                  "nameLocations": [
                    "13915:13:143"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 66116,
                  "src": "13915:13:143"
                },
                "nodeType": "ModifierInvocation",
                "src": "13915:13:143"
              }
            ],
            "name": "auction",
            "nameLocation": "13776:7:143",
            "overrides": {
              "id": 66503,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "13875:8:143"
            },
            "parameters": {
              "id": 66502,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66499,
                  "mutability": "mutable",
                  "name": "borrowId",
                  "nameLocation": "13802:8:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66524,
                  "src": "13794:16:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66498,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13794:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66501,
                  "mutability": "mutable",
                  "name": "onBehalfOf",
                  "nameLocation": "13829:10:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66524,
                  "src": "13821:18:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 66500,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13821:7:143",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13783:63:143"
            },
            "returnParameters": {
              "id": 66508,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13934:0:143"
            },
            "scope": 67262,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 66553,
            "nodeType": "FunctionDefinition",
            "src": "14238:506:143",
            "nodes": [],
            "body": {
              "id": 66552,
              "nodeType": "Block",
              "src": "14434:310:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 66541,
                        "name": "_addressProvider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67283,
                        "src": "14494:16:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                          "typeString": "contract IAddressProvider"
                        }
                      },
                      {
                        "id": 66542,
                        "name": "_reserves",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67288,
                        "src": "14525:9:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                          "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 66545,
                              "name": "_msgSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                67261
                              ],
                              "referencedDeclaration": 67261,
                              "src": "14615:10:143",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                "typeString": "function () view returns (address)"
                              }
                            },
                            "id": 66546,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14615:12:143",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 66547,
                            "name": "borrowIds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66527,
                            "src": "14657:9:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          {
                            "id": 66548,
                            "name": "onBehalfOfs",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66530,
                            "src": "14698:11:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                              "typeString": "address[] calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            },
                            {
                              "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                              "typeString": "address[] calldata"
                            }
                          ],
                          "expression": {
                            "id": 66543,
                            "name": "DataTypes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 64253,
                            "src": "14549:9:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_DataTypes_$64253_$",
                              "typeString": "type(library DataTypes)"
                            }
                          },
                          "id": 66544,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "14559:25:143",
                          "memberName": "ExecuteBatchAuctionParams",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 63947,
                          "src": "14549:35:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_ExecuteBatchAuctionParams_$63947_storage_ptr_$",
                            "typeString": "type(struct DataTypes.ExecuteBatchAuctionParams storage pointer)"
                          }
                        },
                        "id": 66549,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "nameLocations": [
                          "14604:9:143",
                          "14646:9:143",
                          "14685:11:143"
                        ],
                        "names": [
                          "initiator",
                          "borrowIds",
                          "onBehalfOfs"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "14549:176:143",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ExecuteBatchAuctionParams_$63947_memory_ptr",
                          "typeString": "struct DataTypes.ExecuteBatchAuctionParams memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                          "typeString": "contract IAddressProvider"
                        },
                        {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                          "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                        },
                        {
                          "typeIdentifier": "t_struct$_ExecuteBatchAuctionParams_$63947_memory_ptr",
                          "typeString": "struct DataTypes.ExecuteBatchAuctionParams memory"
                        }
                      ],
                      "expression": {
                        "id": 66538,
                        "name": "LiquidateLogic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 60459,
                        "src": "14445:14:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_LiquidateLogic_$60459_$",
                          "typeString": "type(library LiquidateLogic)"
                        }
                      },
                      "id": 66540,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "14460:19:143",
                      "memberName": "executeBatchAuction",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 59724,
                      "src": "14445:34:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_contract$_IAddressProvider_$45420_$_t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$_$_t_struct$_ExecuteBatchAuctionParams_$63947_memory_ptr_$returns$__$",
                        "typeString": "function (contract IAddressProvider,mapping(uint256 => struct DataTypes.Reserve storage ref),struct DataTypes.ExecuteBatchAuctionParams memory)"
                      }
                    },
                    "id": 66550,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14445:291:143",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 66551,
                  "nodeType": "ExpressionStatement",
                  "src": "14445:291:143"
                }
              ]
            },
            "baseFunctions": [
              46848
            ],
            "functionSelector": "34e69b62",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 66534,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 66533,
                  "name": "nonReentrant",
                  "nameLocations": [
                    "14393:12:143"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 26307,
                  "src": "14393:12:143"
                },
                "nodeType": "ModifierInvocation",
                "src": "14393:12:143"
              },
              {
                "id": 66536,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 66535,
                  "name": "whenNotPaused",
                  "nameLocations": [
                    "14415:13:143"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 66116,
                  "src": "14415:13:143"
                },
                "nodeType": "ModifierInvocation",
                "src": "14415:13:143"
              }
            ],
            "name": "batchAuction",
            "nameLocation": "14247:12:143",
            "overrides": {
              "id": 66532,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "14375:8:143"
            },
            "parameters": {
              "id": 66531,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66527,
                  "mutability": "mutable",
                  "name": "borrowIds",
                  "nameLocation": "14289:9:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66553,
                  "src": "14270:28:143",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 66525,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "14270:7:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 66526,
                    "nodeType": "ArrayTypeName",
                    "src": "14270:9:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66530,
                  "mutability": "mutable",
                  "name": "onBehalfOfs",
                  "nameLocation": "14328:11:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66553,
                  "src": "14309:30:143",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 66528,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "14309:7:143",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 66529,
                    "nodeType": "ArrayTypeName",
                    "src": "14309:9:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14259:87:143"
            },
            "returnParameters": {
              "id": 66537,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14434:0:143"
            },
            "scope": 67262,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 66587,
            "nodeType": "FunctionDefinition",
            "src": "15061:565:143",
            "nodes": [],
            "body": {
              "id": 66586,
              "nodeType": "Block",
              "src": "15274:352:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 66573,
                        "name": "_addressProvider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67283,
                        "src": "15325:16:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                          "typeString": "contract IAddressProvider"
                        }
                      },
                      {
                        "id": 66574,
                        "name": "_reserves",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67288,
                        "src": "15356:9:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                          "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 66577,
                              "name": "_msgSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                67261
                              ],
                              "referencedDeclaration": 67261,
                              "src": "15437:10:143",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                "typeString": "function () view returns (address)"
                              }
                            },
                            "id": 66578,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "15437:12:143",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 66579,
                            "name": "asset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66556,
                            "src": "15475:5:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 66580,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66558,
                            "src": "15507:6:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 66581,
                            "name": "borrowId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66560,
                            "src": "15542:8:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 66582,
                            "name": "onBehalfOf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66562,
                            "src": "15581:10:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 66575,
                            "name": "DataTypes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 64253,
                            "src": "15380:9:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_DataTypes_$64253_$",
                              "typeString": "type(library DataTypes)"
                            }
                          },
                          "id": 66576,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "15390:16:143",
                          "memberName": "ExecuteBidParams",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 63958,
                          "src": "15380:26:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_ExecuteBidParams_$63958_storage_ptr_$",
                            "typeString": "type(struct DataTypes.ExecuteBidParams storage pointer)"
                          }
                        },
                        "id": 66583,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "nameLocations": [
                          "15426:9:143",
                          "15468:5:143",
                          "15499:6:143",
                          "15532:8:143",
                          "15569:10:143"
                        ],
                        "names": [
                          "initiator",
                          "asset",
                          "amount",
                          "borrowId",
                          "onBehalfOf"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "15380:227:143",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ExecuteBidParams_$63958_memory_ptr",
                          "typeString": "struct DataTypes.ExecuteBidParams memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                          "typeString": "contract IAddressProvider"
                        },
                        {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                          "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                        },
                        {
                          "typeIdentifier": "t_struct$_ExecuteBidParams_$63958_memory_ptr",
                          "typeString": "struct DataTypes.ExecuteBidParams memory"
                        }
                      ],
                      "expression": {
                        "id": 66570,
                        "name": "LiquidateLogic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 60459,
                        "src": "15285:14:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_LiquidateLogic_$60459_$",
                          "typeString": "type(library LiquidateLogic)"
                        }
                      },
                      "id": 66572,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "15300:10:143",
                      "memberName": "executeBid",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 59745,
                      "src": "15285:25:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_contract$_IAddressProvider_$45420_$_t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$_$_t_struct$_ExecuteBidParams_$63958_memory_ptr_$returns$__$",
                        "typeString": "function (contract IAddressProvider,mapping(uint256 => struct DataTypes.Reserve storage ref),struct DataTypes.ExecuteBidParams memory)"
                      }
                    },
                    "id": 66584,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15285:333:143",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 66585,
                  "nodeType": "ExpressionStatement",
                  "src": "15285:333:143"
                }
              ]
            },
            "baseFunctions": [
              46859
            ],
            "documentation": {
              "id": 66554,
              "nodeType": "StructuredDocumentation",
              "src": "14752:303:143",
              "text": "@notice To purchase the underlying NFT of a defaulted borrow.\n @param asset The asset contract address.\n @param amount The amount of ERC20 tokens to be paid.\n @param borrowId The id of the defaulted borrow.\n @param onBehalfOf The wallet to receive the underlying NFT."
            },
            "functionSelector": "a7ff3b23",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 66566,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 66565,
                  "name": "nonReentrant",
                  "nameLocations": [
                    "15233:12:143"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 26307,
                  "src": "15233:12:143"
                },
                "nodeType": "ModifierInvocation",
                "src": "15233:12:143"
              },
              {
                "id": 66568,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 66567,
                  "name": "whenNotPaused",
                  "nameLocations": [
                    "15255:13:143"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 66116,
                  "src": "15255:13:143"
                },
                "nodeType": "ModifierInvocation",
                "src": "15255:13:143"
              }
            ],
            "name": "bid",
            "nameLocation": "15070:3:143",
            "overrides": {
              "id": 66564,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "15215:8:143"
            },
            "parameters": {
              "id": 66563,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66556,
                  "mutability": "mutable",
                  "name": "asset",
                  "nameLocation": "15092:5:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66587,
                  "src": "15084:13:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 66555,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15084:7:143",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66558,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "15116:6:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66587,
                  "src": "15108:14:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66557,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15108:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66560,
                  "mutability": "mutable",
                  "name": "borrowId",
                  "nameLocation": "15142:8:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66587,
                  "src": "15134:16:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66559,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15134:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66562,
                  "mutability": "mutable",
                  "name": "onBehalfOf",
                  "nameLocation": "15169:10:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66587,
                  "src": "15161:18:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 66561,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15161:7:143",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15073:113:143"
            },
            "returnParameters": {
              "id": 66569,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15274:0:143"
            },
            "scope": 67262,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 66624,
            "nodeType": "FunctionDefinition",
            "src": "15634:636:143",
            "nodes": [],
            "body": {
              "id": 66623,
              "nodeType": "Block",
              "src": "15900:370:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 66610,
                        "name": "_addressProvider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67283,
                        "src": "15956:16:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                          "typeString": "contract IAddressProvider"
                        }
                      },
                      {
                        "id": 66611,
                        "name": "_reserves",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67288,
                        "src": "15987:9:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                          "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 66614,
                              "name": "_msgSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                67261
                              ],
                              "referencedDeclaration": 67261,
                              "src": "16073:10:143",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                "typeString": "function () view returns (address)"
                              }
                            },
                            "id": 66615,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "16073:12:143",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 66616,
                            "name": "assets",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66590,
                            "src": "16112:6:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                              "typeString": "address[] calldata"
                            }
                          },
                          {
                            "id": 66617,
                            "name": "amounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66593,
                            "src": "16146:7:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          {
                            "id": 66618,
                            "name": "borrowIds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66596,
                            "src": "16183:9:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          {
                            "id": 66619,
                            "name": "onBehalfOfs",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66599,
                            "src": "16224:11:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                              "typeString": "address[] calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                              "typeString": "address[] calldata"
                            },
                            {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            },
                            {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            },
                            {
                              "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                              "typeString": "address[] calldata"
                            }
                          ],
                          "expression": {
                            "id": 66612,
                            "name": "DataTypes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 64253,
                            "src": "16011:9:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_DataTypes_$64253_$",
                              "typeString": "type(library DataTypes)"
                            }
                          },
                          "id": 66613,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "16021:21:143",
                          "memberName": "ExecuteBatchBidParams",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 63973,
                          "src": "16011:31:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_ExecuteBatchBidParams_$63973_storage_ptr_$",
                            "typeString": "type(struct DataTypes.ExecuteBatchBidParams storage pointer)"
                          }
                        },
                        "id": 66620,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "nameLocations": [
                          "16062:9:143",
                          "16104:6:143",
                          "16137:7:143",
                          "16172:9:143",
                          "16211:11:143"
                        ],
                        "names": [
                          "initiator",
                          "assets",
                          "amounts",
                          "borrowIds",
                          "onBehalfOfs"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "16011:240:143",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ExecuteBatchBidParams_$63973_memory_ptr",
                          "typeString": "struct DataTypes.ExecuteBatchBidParams memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                          "typeString": "contract IAddressProvider"
                        },
                        {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                          "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                        },
                        {
                          "typeIdentifier": "t_struct$_ExecuteBatchBidParams_$63973_memory_ptr",
                          "typeString": "struct DataTypes.ExecuteBatchBidParams memory"
                        }
                      ],
                      "expression": {
                        "id": 66607,
                        "name": "LiquidateLogic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 60459,
                        "src": "15911:14:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_LiquidateLogic_$60459_$",
                          "typeString": "type(library LiquidateLogic)"
                        }
                      },
                      "id": 66609,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "15926:15:143",
                      "memberName": "executeBatchBid",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 59822,
                      "src": "15911:30:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_contract$_IAddressProvider_$45420_$_t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$_$_t_struct$_ExecuteBatchBidParams_$63973_memory_ptr_$returns$__$",
                        "typeString": "function (contract IAddressProvider,mapping(uint256 => struct DataTypes.Reserve storage ref),struct DataTypes.ExecuteBatchBidParams memory)"
                      }
                    },
                    "id": 66621,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15911:351:143",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 66622,
                  "nodeType": "ExpressionStatement",
                  "src": "15911:351:143"
                }
              ]
            },
            "baseFunctions": [
              46874
            ],
            "functionSelector": "2684dd09",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 66603,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 66602,
                  "name": "nonReentrant",
                  "nameLocations": [
                    "15859:12:143"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 26307,
                  "src": "15859:12:143"
                },
                "nodeType": "ModifierInvocation",
                "src": "15859:12:143"
              },
              {
                "id": 66605,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 66604,
                  "name": "whenNotPaused",
                  "nameLocations": [
                    "15881:13:143"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 66116,
                  "src": "15881:13:143"
                },
                "nodeType": "ModifierInvocation",
                "src": "15881:13:143"
              }
            ],
            "name": "batchBid",
            "nameLocation": "15643:8:143",
            "overrides": {
              "id": 66601,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "15841:8:143"
            },
            "parameters": {
              "id": 66600,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66590,
                  "mutability": "mutable",
                  "name": "assets",
                  "nameLocation": "15681:6:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66624,
                  "src": "15662:25:143",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 66588,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "15662:7:143",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 66589,
                    "nodeType": "ArrayTypeName",
                    "src": "15662:9:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66593,
                  "mutability": "mutable",
                  "name": "amounts",
                  "nameLocation": "15717:7:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66624,
                  "src": "15698:26:143",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 66591,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "15698:7:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 66592,
                    "nodeType": "ArrayTypeName",
                    "src": "15698:9:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66596,
                  "mutability": "mutable",
                  "name": "borrowIds",
                  "nameLocation": "15755:9:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66624,
                  "src": "15736:28:143",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 66594,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "15736:7:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 66595,
                    "nodeType": "ArrayTypeName",
                    "src": "15736:9:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66599,
                  "mutability": "mutable",
                  "name": "onBehalfOfs",
                  "nameLocation": "15794:11:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66624,
                  "src": "15775:30:143",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 66597,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "15775:7:143",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 66598,
                    "nodeType": "ArrayTypeName",
                    "src": "15775:9:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15651:161:143"
            },
            "returnParameters": {
              "id": 66606,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15900:0:143"
            },
            "scope": 67262,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 66640,
            "nodeType": "FunctionDefinition",
            "src": "16447:227:143",
            "nodes": [],
            "body": {
              "id": 66639,
              "nodeType": "Block",
              "src": "16614:60:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "baseExpression": {
                        "id": 66634,
                        "name": "_reserves",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67288,
                        "src": "16632:9:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                          "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                        }
                      },
                      "id": 66636,
                      "indexExpression": {
                        "id": 66635,
                        "name": "reserveId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 66627,
                        "src": "16642:9:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "16632:20:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Reserve_$63713_storage",
                        "typeString": "struct DataTypes.Reserve storage ref"
                      }
                    },
                    "id": 66637,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "16653:13:143",
                    "memberName": "configuration",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 63680,
                    "src": "16632:34:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ReserveConfigurationMap_$63746_storage",
                      "typeString": "struct DataTypes.ReserveConfigurationMap storage ref"
                    }
                  },
                  "functionReturnParameters": 66633,
                  "id": 66638,
                  "nodeType": "Return",
                  "src": "16625:41:143"
                }
              ]
            },
            "baseFunctions": [
              46882
            ],
            "documentation": {
              "id": 66625,
              "nodeType": "StructuredDocumentation",
              "src": "16278:163:143",
              "text": " @dev Returns the configuration of the reserve\n @param reserveId The id of the reserve\n @return The configuration of the reserve*"
            },
            "functionSelector": "eadff055",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getReserveConfiguration",
            "nameLocation": "16456:23:143",
            "overrides": {
              "id": 66629,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "16540:8:143"
            },
            "parameters": {
              "id": 66628,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66627,
                  "mutability": "mutable",
                  "name": "reserveId",
                  "nameLocation": "16488:9:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66640,
                  "src": "16480:17:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66626,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16480:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16479:19:143"
            },
            "returnParameters": {
              "id": 66633,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66632,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 66640,
                  "src": "16567:40:143",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_ReserveConfigurationMap_$63746_memory_ptr",
                    "typeString": "struct DataTypes.ReserveConfigurationMap"
                  },
                  "typeName": {
                    "id": 66631,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 66630,
                      "name": "DataTypes.ReserveConfigurationMap",
                      "nameLocations": [
                        "16567:9:143",
                        "16577:23:143"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 63746,
                      "src": "16567:33:143"
                    },
                    "referencedDeclaration": 63746,
                    "src": "16567:33:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ReserveConfigurationMap_$63746_storage_ptr",
                      "typeString": "struct DataTypes.ReserveConfigurationMap"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16566:42:143"
            },
            "scope": 67262,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 66658,
            "nodeType": "FunctionDefinition",
            "src": "16682:203:143",
            "nodes": [],
            "body": {
              "id": 66657,
              "nodeType": "Block",
              "src": "16814:71:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 66655,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 66650,
                          "name": "_reserves",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 67288,
                          "src": "16825:9:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                            "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                          }
                        },
                        "id": 66652,
                        "indexExpression": {
                          "id": 66651,
                          "name": "reserveId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 66642,
                          "src": "16835:9:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "16825:20:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Reserve_$63713_storage",
                          "typeString": "struct DataTypes.Reserve storage ref"
                        }
                      },
                      "id": 66653,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "16846:14:143",
                      "memberName": "maxTokenSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 63698,
                      "src": "16825:35:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 66654,
                      "name": "maxTokenSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 66644,
                      "src": "16863:14:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "16825:52:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 66656,
                  "nodeType": "ExpressionStatement",
                  "src": "16825:52:143"
                }
              ]
            },
            "baseFunctions": [
              47017
            ],
            "functionSelector": "d6ee0f73",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 66648,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 66647,
                  "name": "onlyConfigurator",
                  "nameLocations": [
                    "16797:16:143"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 66109,
                  "src": "16797:16:143"
                },
                "nodeType": "ModifierInvocation",
                "src": "16797:16:143"
              }
            ],
            "name": "setReserveMaxSupply",
            "nameLocation": "16691:19:143",
            "overrides": {
              "id": 66646,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "16788:8:143"
            },
            "parameters": {
              "id": 66645,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66642,
                  "mutability": "mutable",
                  "name": "reserveId",
                  "nameLocation": "16729:9:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66658,
                  "src": "16721:17:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66641,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16721:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66644,
                  "mutability": "mutable",
                  "name": "maxTokenSupply",
                  "nameLocation": "16757:14:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66658,
                  "src": "16749:22:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66643,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16749:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16710:68:143"
            },
            "returnParameters": {
              "id": 66649,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16814:0:143"
            },
            "scope": 67262,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 66699,
            "nodeType": "FunctionDefinition",
            "src": "17086:365:143",
            "nodes": [],
            "body": {
              "id": 66698,
              "nodeType": "Block",
              "src": "17149:302:143",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 66669,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 66667,
                      "name": "_paused",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67325,
                      "src": "17164:7:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "id": 66668,
                      "name": "val",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 66661,
                      "src": "17175:3:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "17164:14:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 66697,
                  "nodeType": "IfStatement",
                  "src": "17160:284:143",
                  "trueBody": {
                    "id": 66696,
                    "nodeType": "Block",
                    "src": "17180:264:143",
                    "statements": [
                      {
                        "expression": {
                          "id": 66672,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 66670,
                            "name": "_paused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 67325,
                            "src": "17191:7:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 66671,
                            "name": "val",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66661,
                            "src": "17201:3:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "17191:13:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 66673,
                        "nodeType": "ExpressionStatement",
                        "src": "17191:13:143"
                      },
                      {
                        "condition": {
                          "id": 66674,
                          "name": "_paused",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 67325,
                          "src": "17219:7:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 66694,
                          "nodeType": "Block",
                          "src": "17322:111:143",
                          "statements": [
                            {
                              "expression": {
                                "id": 66689,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 66684,
                                  "name": "_pauseDurationTime",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 67329,
                                  "src": "17337:18:143",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 66688,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "expression": {
                                      "id": 66685,
                                      "name": "block",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -4,
                                      "src": "17358:5:143",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_block",
                                        "typeString": "block"
                                      }
                                    },
                                    "id": 66686,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "17364:9:143",
                                    "memberName": "timestamp",
                                    "nodeType": "MemberAccess",
                                    "src": "17358:15:143",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "id": 66687,
                                    "name": "_pauseStartTime",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 67327,
                                    "src": "17376:15:143",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "17358:33:143",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "17337:54:143",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 66690,
                              "nodeType": "ExpressionStatement",
                              "src": "17337:54:143"
                            },
                            {
                              "eventCall": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 66691,
                                  "name": "Unpaused",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 46563,
                                  "src": "17411:8:143",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$__$returns$__$",
                                    "typeString": "function ()"
                                  }
                                },
                                "id": 66692,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "17411:10:143",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 66693,
                              "nodeType": "EmitStatement",
                              "src": "17406:15:143"
                            }
                          ]
                        },
                        "id": 66695,
                        "nodeType": "IfStatement",
                        "src": "17215:218:143",
                        "trueBody": {
                          "id": 66683,
                          "nodeType": "Block",
                          "src": "17228:88:143",
                          "statements": [
                            {
                              "expression": {
                                "id": 66678,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 66675,
                                  "name": "_pauseStartTime",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 67327,
                                  "src": "17243:15:143",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "expression": {
                                    "id": 66676,
                                    "name": "block",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -4,
                                    "src": "17261:5:143",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_block",
                                      "typeString": "block"
                                    }
                                  },
                                  "id": 66677,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "17267:9:143",
                                  "memberName": "timestamp",
                                  "nodeType": "MemberAccess",
                                  "src": "17261:15:143",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "17243:33:143",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 66679,
                              "nodeType": "ExpressionStatement",
                              "src": "17243:33:143"
                            },
                            {
                              "eventCall": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 66680,
                                  "name": "Paused",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 46560,
                                  "src": "17296:6:143",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$__$returns$__$",
                                    "typeString": "function ()"
                                  }
                                },
                                "id": 66681,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "17296:8:143",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 66682,
                              "nodeType": "EmitStatement",
                              "src": "17291:13:143"
                            }
                          ]
                        }
                      }
                    ]
                  }
                }
              ]
            },
            "baseFunctions": [
              46913
            ],
            "documentation": {
              "id": 66659,
              "nodeType": "StructuredDocumentation",
              "src": "16893:187:143",
              "text": " @dev Set the _pause state of the pool\n - Only callable by the LendPoolConfigurator contract\n @param val `true` to pause the pool, `false` to un-pause it"
            },
            "functionSelector": "bedb86fb",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 66665,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 66664,
                  "name": "onlyConfigurator",
                  "nameLocations": [
                    "17132:16:143"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 66109,
                  "src": "17132:16:143"
                },
                "nodeType": "ModifierInvocation",
                "src": "17132:16:143"
              }
            ],
            "name": "setPause",
            "nameLocation": "17095:8:143",
            "overrides": {
              "id": 66663,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "17123:8:143"
            },
            "parameters": {
              "id": 66662,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66661,
                  "mutability": "mutable",
                  "name": "val",
                  "nameLocation": "17109:3:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66699,
                  "src": "17104:8:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 66660,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "17104:4:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17103:10:143"
            },
            "returnParameters": {
              "id": 66666,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17149:0:143"
            },
            "scope": 67262,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 66709,
            "nodeType": "FunctionDefinition",
            "src": "17522:89:143",
            "nodes": [],
            "body": {
              "id": 66708,
              "nodeType": "Block",
              "src": "17578:33:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 66706,
                    "name": "_paused",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 67325,
                    "src": "17596:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 66705,
                  "id": 66707,
                  "nodeType": "Return",
                  "src": "17589:14:143"
                }
              ]
            },
            "baseFunctions": [
              46926
            ],
            "documentation": {
              "id": 66700,
              "nodeType": "StructuredDocumentation",
              "src": "17459:57:143",
              "text": " @dev Returns if the LendPool is paused"
            },
            "functionSelector": "5c975abb",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "paused",
            "nameLocation": "17531:6:143",
            "overrides": {
              "id": 66702,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "17554:8:143"
            },
            "parameters": {
              "id": 66701,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17537:2:143"
            },
            "returnParameters": {
              "id": 66705,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66704,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 66709,
                  "src": "17572:4:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 66703,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "17572:4:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17571:6:143"
            },
            "scope": 67262,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 66733,
            "nodeType": "FunctionDefinition",
            "src": "17619:247:143",
            "nodes": [],
            "body": {
              "id": 66732,
              "nodeType": "Block",
              "src": "17718:148:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 66721,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 66719,
                      "name": "_pauseStartTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67327,
                      "src": "17729:15:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 66720,
                      "name": "startTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 66711,
                      "src": "17747:9:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17729:27:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 66722,
                  "nodeType": "ExpressionStatement",
                  "src": "17729:27:143"
                },
                {
                  "expression": {
                    "id": 66725,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 66723,
                      "name": "_pauseDurationTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67329,
                      "src": "17767:18:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 66724,
                      "name": "durationTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 66713,
                      "src": "17788:12:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17767:33:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 66726,
                  "nodeType": "ExpressionStatement",
                  "src": "17767:33:143"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 66728,
                        "name": "startTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 66711,
                        "src": "17834:9:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 66729,
                        "name": "durationTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 66713,
                        "src": "17845:12:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 66727,
                      "name": "PausedTimeUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 46570,
                      "src": "17816:17:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 66730,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17816:42:143",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 66731,
                  "nodeType": "EmitStatement",
                  "src": "17811:47:143"
                }
              ]
            },
            "baseFunctions": [
              46920
            ],
            "functionSelector": "2f923ff7",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 66717,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 66716,
                  "name": "onlyConfigurator",
                  "nameLocations": [
                    "17701:16:143"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 66109,
                  "src": "17701:16:143"
                },
                "nodeType": "ModifierInvocation",
                "src": "17701:16:143"
              }
            ],
            "name": "setPausedTime",
            "nameLocation": "17628:13:143",
            "overrides": {
              "id": 66715,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "17692:8:143"
            },
            "parameters": {
              "id": 66714,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66711,
                  "mutability": "mutable",
                  "name": "startTime",
                  "nameLocation": "17650:9:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66733,
                  "src": "17642:17:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66710,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17642:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66713,
                  "mutability": "mutable",
                  "name": "durationTime",
                  "nameLocation": "17669:12:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66733,
                  "src": "17661:20:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66712,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17661:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17641:41:143"
            },
            "returnParameters": {
              "id": 66718,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17718:0:143"
            },
            "scope": 67262,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 66746,
            "nodeType": "FunctionDefinition",
            "src": "17874:138:143",
            "nodes": [],
            "body": {
              "id": 66745,
              "nodeType": "Block",
              "src": "17949:63:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "components": [
                      {
                        "id": 66741,
                        "name": "_pauseStartTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67327,
                        "src": "17968:15:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 66742,
                        "name": "_pauseDurationTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67329,
                        "src": "17985:18:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 66743,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "17967:37:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 66740,
                  "id": 66744,
                  "nodeType": "Return",
                  "src": "17960:44:143"
                }
              ]
            },
            "baseFunctions": [
              46933
            ],
            "functionSelector": "8fc42188",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getPausedTime",
            "nameLocation": "17883:13:143",
            "overrides": {
              "id": 66735,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "17913:8:143"
            },
            "parameters": {
              "id": 66734,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17896:2:143"
            },
            "returnParameters": {
              "id": 66740,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66737,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 66746,
                  "src": "17931:7:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66736,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17931:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66739,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 66746,
                  "src": "17940:7:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66738,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17940:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17930:18:143"
            },
            "scope": 67262,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 66757,
            "nodeType": "FunctionDefinition",
            "src": "18112:122:143",
            "nodes": [],
            "body": {
              "id": 66756,
              "nodeType": "Block",
              "src": "18192:42:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 66754,
                    "name": "_addressProvider",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 67283,
                    "src": "18210:16:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                      "typeString": "contract IAddressProvider"
                    }
                  },
                  "functionReturnParameters": 66753,
                  "id": 66755,
                  "nodeType": "Return",
                  "src": "18203:23:143"
                }
              ]
            },
            "baseFunctions": [
              46939
            ],
            "documentation": {
              "id": 66747,
              "nodeType": "StructuredDocumentation",
              "src": "18020:86:143",
              "text": " @dev Returns the cached AddressProvider connected to this contract*"
            },
            "functionSelector": "f8c68934",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getAddressProvider",
            "nameLocation": "18121:18:143",
            "overrides": {
              "id": 66749,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "18156:8:143"
            },
            "parameters": {
              "id": 66748,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "18139:2:143"
            },
            "returnParameters": {
              "id": 66753,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66752,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 66757,
                  "src": "18174:16:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                    "typeString": "contract IAddressProvider"
                  },
                  "typeName": {
                    "id": 66751,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 66750,
                      "name": "IAddressProvider",
                      "nameLocations": [
                        "18174:16:143"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 45420,
                      "src": "18174:16:143"
                    },
                    "referencedDeclaration": 45420,
                    "src": "18174:16:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                      "typeString": "contract IAddressProvider"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18173:18:143"
            },
            "scope": 67262,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 66770,
            "nodeType": "FunctionDefinition",
            "src": "18242:125:143",
            "nodes": [],
            "body": {
              "id": 66769,
              "nodeType": "Block",
              "src": "18322:45:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 66767,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 66765,
                      "name": "_maxNumberOfReserves",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67314,
                      "src": "18333:20:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 66766,
                      "name": "val",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 66759,
                      "src": "18356:3:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "18333:26:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 66768,
                  "nodeType": "ExpressionStatement",
                  "src": "18333:26:143"
                }
              ]
            },
            "baseFunctions": [
              47005
            ],
            "functionSelector": "746c35a2",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 66763,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 66762,
                  "name": "onlyConfigurator",
                  "nameLocations": [
                    "18305:16:143"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 66109,
                  "src": "18305:16:143"
                },
                "nodeType": "ModifierInvocation",
                "src": "18305:16:143"
              }
            ],
            "name": "setMaxNumberOfReserves",
            "nameLocation": "18251:22:143",
            "overrides": {
              "id": 66761,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "18296:8:143"
            },
            "parameters": {
              "id": 66760,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66759,
                  "mutability": "mutable",
                  "name": "val",
                  "nameLocation": "18282:3:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66770,
                  "src": "18274:11:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66758,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18274:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18273:13:143"
            },
            "returnParameters": {
              "id": 66764,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "18322:0:143"
            },
            "scope": 67262,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 66785,
            "nodeType": "FunctionDefinition",
            "src": "18546:201:143",
            "nodes": [],
            "body": {
              "id": 66784,
              "nodeType": "Block",
              "src": "18701:46:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "id": 66780,
                      "name": "_reserves",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67288,
                      "src": "18719:9:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                        "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                      }
                    },
                    "id": 66782,
                    "indexExpression": {
                      "id": 66781,
                      "name": "reserveId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 66773,
                      "src": "18729:9:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "18719:20:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Reserve_$63713_storage",
                      "typeString": "struct DataTypes.Reserve storage ref"
                    }
                  },
                  "functionReturnParameters": 66779,
                  "id": 66783,
                  "nodeType": "Return",
                  "src": "18712:27:143"
                }
              ]
            },
            "baseFunctions": [
              46969
            ],
            "documentation": {
              "id": 66771,
              "nodeType": "StructuredDocumentation",
              "src": "18375:165:143",
              "text": " @dev Returns the state and configuration of the reserve\n @param reserveId The id of the reserve\n @return The state of the reserve*"
            },
            "functionSelector": "77778db3",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getReserve",
            "nameLocation": "18555:10:143",
            "overrides": {
              "id": 66775,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "18642:8:143"
            },
            "parameters": {
              "id": 66774,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66773,
                  "mutability": "mutable",
                  "name": "reserveId",
                  "nameLocation": "18584:9:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66785,
                  "src": "18576:17:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66772,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18576:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18565:35:143"
            },
            "returnParameters": {
              "id": 66779,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66778,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 66785,
                  "src": "18669:24:143",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Reserve_$63713_memory_ptr",
                    "typeString": "struct DataTypes.Reserve"
                  },
                  "typeName": {
                    "id": 66777,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 66776,
                      "name": "DataTypes.Reserve",
                      "nameLocations": [
                        "18669:9:143",
                        "18679:7:143"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 63713,
                      "src": "18669:17:143"
                    },
                    "referencedDeclaration": 63713,
                    "src": "18669:17:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Reserve_$63713_storage_ptr",
                      "typeString": "struct DataTypes.Reserve"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18668:26:143"
            },
            "scope": 67262,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 66810,
            "nodeType": "FunctionDefinition",
            "src": "18755:307:143",
            "nodes": [],
            "body": {
              "id": 66809,
              "nodeType": "Block",
              "src": "18981:81:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 66799,
                          "name": "_reserveIds",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 67296,
                          "src": "18999:11:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_uint256_$_$_$",
                            "typeString": "mapping(address => mapping(address => mapping(uint256 => uint256)))"
                          }
                        },
                        "id": 66801,
                        "indexExpression": {
                          "id": 66800,
                          "name": "collateral",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 66787,
                          "src": "19011:10:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "18999:23:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                          "typeString": "mapping(address => mapping(uint256 => uint256))"
                        }
                      },
                      "id": 66803,
                      "indexExpression": {
                        "id": 66802,
                        "name": "asset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 66789,
                        "src": "19023:5:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "18999:30:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                        "typeString": "mapping(uint256 => uint256)"
                      }
                    },
                    "id": 66807,
                    "indexExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 66806,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 66804,
                        "name": "maxTokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 66791,
                        "src": "19030:10:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "id": 66805,
                        "name": "minTokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 66793,
                        "src": "19043:10:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "19030:23:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "18999:55:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 66798,
                  "id": 66808,
                  "nodeType": "Return",
                  "src": "18992:62:143"
                }
              ]
            },
            "baseFunctions": [
              46982
            ],
            "functionSelector": "52120e23",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getReserveId",
            "nameLocation": "18764:12:143",
            "overrides": {
              "id": 66795,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "18938:8:143"
            },
            "parameters": {
              "id": 66794,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66787,
                  "mutability": "mutable",
                  "name": "collateral",
                  "nameLocation": "18795:10:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66810,
                  "src": "18787:18:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 66786,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18787:7:143",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66789,
                  "mutability": "mutable",
                  "name": "asset",
                  "nameLocation": "18824:5:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66810,
                  "src": "18816:13:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 66788,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18816:7:143",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66791,
                  "mutability": "mutable",
                  "name": "maxTokenId",
                  "nameLocation": "18849:10:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66810,
                  "src": "18841:18:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66790,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18841:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66793,
                  "mutability": "mutable",
                  "name": "minTokenId",
                  "nameLocation": "18878:10:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66810,
                  "src": "18870:18:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66792,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18870:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18776:119:143"
            },
            "returnParameters": {
              "id": 66798,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66797,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 66810,
                  "src": "18966:7:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66796,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18966:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18965:9:143"
            },
            "scope": 67262,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 66847,
            "nodeType": "FunctionDefinition",
            "src": "19070:308:143",
            "nodes": [],
            "body": {
              "id": 66846,
              "nodeType": "Block",
              "src": "19203:175:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 66823,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 66817,
                      "name": "reservesList",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 66815,
                      "src": "19214:12:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[] memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 66821,
                          "name": "_reservesCount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 67312,
                          "src": "19243:14:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 66820,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "NewExpression",
                        "src": "19229:13:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                          "typeString": "function (uint256) pure returns (uint256[] memory)"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 66818,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "19233:7:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 66819,
                          "nodeType": "ArrayTypeName",
                          "src": "19233:9:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        }
                      },
                      "id": 66822,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19229:29:143",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[] memory"
                      }
                    },
                    "src": "19214:44:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  },
                  "id": 66824,
                  "nodeType": "ExpressionStatement",
                  "src": "19214:44:143"
                },
                {
                  "body": {
                    "id": 66844,
                    "nodeType": "Block",
                    "src": "19311:60:143",
                    "statements": [
                      {
                        "expression": {
                          "id": 66842,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 66835,
                              "name": "reservesList",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 66815,
                              "src": "19326:12:143",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 66837,
                            "indexExpression": {
                              "id": 66836,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 66826,
                              "src": "19339:1:143",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "19326:15:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 66838,
                                "name": "_reserves",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 67288,
                                "src": "19344:9:143",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                                  "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                                }
                              },
                              "id": 66840,
                              "indexExpression": {
                                "id": 66839,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 66826,
                                "src": "19354:1:143",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "19344:12:143",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Reserve_$63713_storage",
                                "typeString": "struct DataTypes.Reserve storage ref"
                              }
                            },
                            "id": 66841,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "19357:2:143",
                            "memberName": "id",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 63696,
                            "src": "19344:15:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "19326:33:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 66843,
                        "nodeType": "ExpressionStatement",
                        "src": "19326:33:143"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 66831,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 66829,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 66826,
                      "src": "19286:1:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 66830,
                      "name": "_reservesCount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67312,
                      "src": "19290:14:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "19286:18:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 66845,
                  "initializationExpression": {
                    "assignments": [
                      66826
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 66826,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "19279:1:143",
                        "nodeType": "VariableDeclaration",
                        "scope": 66845,
                        "src": "19274:6:143",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 66825,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "19274:4:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 66828,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 66827,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "19283:1:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "19274:10:143"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 66833,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "19306:3:143",
                      "subExpression": {
                        "id": 66832,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 66826,
                        "src": "19306:1:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 66834,
                    "nodeType": "ExpressionStatement",
                    "src": "19306:3:143"
                  },
                  "nodeType": "ForStatement",
                  "src": "19269:102:143"
                }
              ]
            },
            "baseFunctions": [
              46988
            ],
            "functionSelector": "d1946dbc",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getReservesList",
            "nameLocation": "19079:15:143",
            "overrides": {
              "id": 66812,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "19139:8:143"
            },
            "parameters": {
              "id": 66811,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19094:2:143"
            },
            "returnParameters": {
              "id": 66816,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66815,
                  "mutability": "mutable",
                  "name": "reservesList",
                  "nameLocation": "19183:12:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66847,
                  "src": "19166:29:143",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 66813,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "19166:7:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 66814,
                    "nodeType": "ArrayTypeName",
                    "src": "19166:9:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "19165:31:143"
            },
            "scope": 67262,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 66857,
            "nodeType": "FunctionDefinition",
            "src": "19386:182:143",
            "nodes": [],
            "body": {
              "id": 66856,
              "nodeType": "Block",
              "src": "19516:52:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 66854,
                    "name": "_initializedCollateralList",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 67303,
                    "src": "19534:26:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                      "typeString": "address[] storage ref"
                    }
                  },
                  "functionReturnParameters": 66853,
                  "id": 66855,
                  "nodeType": "Return",
                  "src": "19527:33:143"
                }
              ]
            },
            "baseFunctions": [
              46994
            ],
            "functionSelector": "31e884bb",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getInitializedCollaterals",
            "nameLocation": "19395:25:143",
            "overrides": {
              "id": 66849,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "19465:8:143"
            },
            "parameters": {
              "id": 66848,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19420:2:143"
            },
            "returnParameters": {
              "id": 66853,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66852,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 66857,
                  "src": "19492:16:143",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 66850,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "19492:7:143",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 66851,
                    "nodeType": "ArrayTypeName",
                    "src": "19492:9:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "19491:18:143"
            },
            "scope": 67262,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 66867,
            "nodeType": "FunctionDefinition",
            "src": "19576:172:143",
            "nodes": [],
            "body": {
              "id": 66866,
              "nodeType": "Block",
              "src": "19701:47:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 66864,
                    "name": "_initializedAssetList",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 67310,
                    "src": "19719:21:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                      "typeString": "address[] storage ref"
                    }
                  },
                  "functionReturnParameters": 66863,
                  "id": 66865,
                  "nodeType": "Return",
                  "src": "19712:28:143"
                }
              ]
            },
            "baseFunctions": [
              47000
            ],
            "functionSelector": "3b4ecdb2",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getInitializedAssets",
            "nameLocation": "19585:20:143",
            "overrides": {
              "id": 66859,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "19650:8:143"
            },
            "parameters": {
              "id": 66858,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19605:2:143"
            },
            "returnParameters": {
              "id": 66863,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66862,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 66867,
                  "src": "19677:16:143",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 66860,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "19677:7:143",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 66861,
                    "nodeType": "ArrayTypeName",
                    "src": "19677:9:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "19676:18:143"
            },
            "scope": 67262,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 66877,
            "nodeType": "FunctionDefinition",
            "src": "19866:119:143",
            "nodes": [],
            "body": {
              "id": 66876,
              "nodeType": "Block",
              "src": "19939:46:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 66874,
                    "name": "_maxNumberOfReserves",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 67314,
                    "src": "19957:20:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 66873,
                  "id": 66875,
                  "nodeType": "Return",
                  "src": "19950:27:143"
                }
              ]
            },
            "baseFunctions": [
              47010
            ],
            "documentation": {
              "id": 66868,
              "nodeType": "StructuredDocumentation",
              "src": "19756:104:143",
              "text": " @dev Returns the maximum number of reserves supported to be listed in this LendPool"
            },
            "functionSelector": "08ac08b9",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getMaxNumberOfReserves",
            "nameLocation": "19875:22:143",
            "overrides": {
              "id": 66870,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "19912:8:143"
            },
            "parameters": {
              "id": 66869,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19897:2:143"
            },
            "returnParameters": {
              "id": 66873,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66872,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 66877,
                  "src": "19930:7:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66871,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19930:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "19929:9:143"
            },
            "scope": 67262,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 66933,
            "nodeType": "FunctionDefinition",
            "src": "20541:613:143",
            "nodes": [],
            "body": {
              "id": 66932,
              "nodeType": "Block",
              "src": "20824:330:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 66896,
                    "name": "from",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 66882,
                    "src": "20835:4:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 66897,
                  "nodeType": "ExpressionStatement",
                  "src": "20835:4:143"
                },
                {
                  "expression": {
                    "id": 66898,
                    "name": "to",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 66884,
                    "src": "20850:2:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 66899,
                  "nodeType": "ExpressionStatement",
                  "src": "20850:2:143"
                },
                {
                  "expression": {
                    "id": 66900,
                    "name": "amount",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 66886,
                    "src": "20863:6:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 66901,
                  "nodeType": "ExpressionStatement",
                  "src": "20863:6:143"
                },
                {
                  "expression": {
                    "id": 66902,
                    "name": "balanceFromBefore",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 66888,
                    "src": "20880:17:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 66903,
                  "nodeType": "ExpressionStatement",
                  "src": "20880:17:143"
                },
                {
                  "expression": {
                    "id": 66904,
                    "name": "balanceToBefore",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 66890,
                    "src": "20908:15:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 66905,
                  "nodeType": "ExpressionStatement",
                  "src": "20908:15:143"
                },
                {
                  "assignments": [
                    66910
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 66910,
                      "mutability": "mutable",
                      "name": "reserve",
                      "nameLocation": "20962:7:143",
                      "nodeType": "VariableDeclaration",
                      "scope": 66932,
                      "src": "20936:33:143",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Reserve_$63713_storage_ptr",
                        "typeString": "struct DataTypes.Reserve"
                      },
                      "typeName": {
                        "id": 66909,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 66908,
                          "name": "DataTypes.Reserve",
                          "nameLocations": [
                            "20936:9:143",
                            "20946:7:143"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 63713,
                          "src": "20936:17:143"
                        },
                        "referencedDeclaration": 63713,
                        "src": "20936:17:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Reserve_$63713_storage_ptr",
                          "typeString": "struct DataTypes.Reserve"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 66914,
                  "initialValue": {
                    "baseExpression": {
                      "id": 66911,
                      "name": "_reserves",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67288,
                      "src": "20972:9:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                        "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                      }
                    },
                    "id": 66913,
                    "indexExpression": {
                      "id": 66912,
                      "name": "reserveId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 66880,
                      "src": "20982:9:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "20972:20:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Reserve_$63713_storage",
                      "typeString": "struct DataTypes.Reserve storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "20936:56:143"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 66920,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 66916,
                            "name": "_msgSender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              67261
                            ],
                            "referencedDeclaration": 67261,
                            "src": "21011:10:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                              "typeString": "function () view returns (address)"
                            }
                          },
                          "id": 66917,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "21011:12:143",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "expression": {
                            "id": 66918,
                            "name": "reserve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66910,
                            "src": "21027:7:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Reserve_$63713_storage_ptr",
                              "typeString": "struct DataTypes.Reserve storage pointer"
                            }
                          },
                          "id": 66919,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "21035:13:143",
                          "memberName": "fTokenAddress",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 63686,
                          "src": "21027:21:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "21011:37:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "expression": {
                          "id": 66921,
                          "name": "Errors",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 56900,
                          "src": "21050:6:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Errors_$56900_$",
                            "typeString": "type(library Errors)"
                          }
                        },
                        "id": 66922,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "21057:27:143",
                        "memberName": "LP_CALLER_MUST_BE_AN_FTOKEN",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 56638,
                        "src": "21050:34:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 66915,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "21003:7:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 66923,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21003:82:143",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 66924,
                  "nodeType": "ExpressionStatement",
                  "src": "21003:82:143"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 66928,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 66882,
                        "src": "21131:4:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 66929,
                        "name": "reserve",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 66910,
                        "src": "21137:7:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Reserve_$63713_storage_ptr",
                          "typeString": "struct DataTypes.Reserve storage pointer"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_struct$_Reserve_$63713_storage_ptr",
                          "typeString": "struct DataTypes.Reserve storage pointer"
                        }
                      ],
                      "expression": {
                        "id": 66925,
                        "name": "ValidationLogic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62908,
                        "src": "21098:15:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ValidationLogic_$62908_$",
                          "typeString": "type(library ValidationLogic)"
                        }
                      },
                      "id": 66927,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "21114:16:143",
                      "memberName": "validateTransfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 62661,
                      "src": "21098:32:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_struct$_Reserve_$63713_storage_ptr_$returns$__$",
                        "typeString": "function (address,struct DataTypes.Reserve storage pointer) pure"
                      }
                    },
                    "id": 66930,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21098:47:143",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 66931,
                  "nodeType": "ExpressionStatement",
                  "src": "21098:47:143"
                }
              ]
            },
            "baseFunctions": [
              46954
            ],
            "documentation": {
              "id": 66878,
              "nodeType": "StructuredDocumentation",
              "src": "19993:542:143",
              "text": " @dev Validates and finalizes an fToken transfer\n - Only callable by the overlying fToken of the `asset`  \n @param reserveId The id of the fToken reserve\n @param from The user from which the fToken are transferred\n @param to The user receiving the fTokens\n @param amount The amount being transferred/withdrawn\n @param balanceFromBefore The fToken balance of the `from` user before the transfer\n @param balanceToBefore The fToken balance of the `to` user before the transfer"
            },
            "functionSelector": "6c130dc7",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 66894,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 66893,
                  "name": "whenNotPaused",
                  "nameLocations": [
                    "20804:13:143"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 66116,
                  "src": "20804:13:143"
                },
                "nodeType": "ModifierInvocation",
                "src": "20804:13:143"
              }
            ],
            "name": "finalizeTransfer",
            "nameLocation": "20550:16:143",
            "overrides": {
              "id": 66892,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "20786:8:143"
            },
            "parameters": {
              "id": 66891,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66880,
                  "mutability": "mutable",
                  "name": "reserveId",
                  "nameLocation": "20585:9:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66933,
                  "src": "20577:17:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66879,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20577:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66882,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "20613:4:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66933,
                  "src": "20605:12:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 66881,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20605:7:143",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66884,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "20636:2:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66933,
                  "src": "20628:10:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 66883,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20628:7:143",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66886,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "20657:6:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66933,
                  "src": "20649:14:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66885,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20649:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66888,
                  "mutability": "mutable",
                  "name": "balanceFromBefore",
                  "nameLocation": "20682:17:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66933,
                  "src": "20674:25:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66887,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20674:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66890,
                  "mutability": "mutable",
                  "name": "balanceToBefore",
                  "nameLocation": "20718:15:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66933,
                  "src": "20710:23:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66889,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20710:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20566:174:143"
            },
            "returnParameters": {
              "id": 66895,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "20824:0:143"
            },
            "scope": 67262,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 66948,
            "nodeType": "FunctionDefinition",
            "src": "21162:164:143",
            "nodes": [],
            "body": {
              "id": 66947,
              "nodeType": "Block",
              "src": "21258:68:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "baseExpression": {
                          "id": 66941,
                          "name": "_reserves",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 67288,
                          "src": "21276:9:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                            "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                          }
                        },
                        "id": 66943,
                        "indexExpression": {
                          "id": 66942,
                          "name": "reserveId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 66935,
                          "src": "21286:9:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "21276:20:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Reserve_$63713_storage",
                          "typeString": "struct DataTypes.Reserve storage ref"
                        }
                      },
                      "id": 66944,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "21297:19:143",
                      "memberName": "getNormalizedIncome",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 60773,
                      "src": "21276:40:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Reserve_$63713_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Reserve_$63713_storage_ptr_$",
                        "typeString": "function (struct DataTypes.Reserve storage pointer) view returns (uint256)"
                      }
                    },
                    "id": 66945,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21276:42:143",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 66940,
                  "id": 66946,
                  "nodeType": "Return",
                  "src": "21269:49:143"
                }
              ]
            },
            "baseFunctions": [
              46898
            ],
            "functionSelector": "dcc5cded",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getReserveNormalizedIncome",
            "nameLocation": "21171:26:143",
            "overrides": {
              "id": 66937,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "21231:8:143"
            },
            "parameters": {
              "id": 66936,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66935,
                  "mutability": "mutable",
                  "name": "reserveId",
                  "nameLocation": "21206:9:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66948,
                  "src": "21198:17:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66934,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21198:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21197:19:143"
            },
            "returnParameters": {
              "id": 66940,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66939,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 66948,
                  "src": "21249:7:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66938,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21249:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21248:9:143"
            },
            "scope": 67262,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 66964,
            "nodeType": "FunctionDefinition",
            "src": "21520:168:143",
            "nodes": [],
            "body": {
              "id": 66963,
              "nodeType": "Block",
              "src": "21622:66:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "baseExpression": {
                          "id": 66957,
                          "name": "_reserves",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 67288,
                          "src": "21640:9:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                            "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                          }
                        },
                        "id": 66959,
                        "indexExpression": {
                          "id": 66958,
                          "name": "reserveId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 66951,
                          "src": "21650:9:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "21640:20:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Reserve_$63713_storage",
                          "typeString": "struct DataTypes.Reserve storage ref"
                        }
                      },
                      "id": 66960,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "21661:17:143",
                      "memberName": "getNormalizedDebt",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 60815,
                      "src": "21640:38:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Reserve_$63713_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Reserve_$63713_storage_ptr_$",
                        "typeString": "function (struct DataTypes.Reserve storage pointer) view returns (uint256)"
                      }
                    },
                    "id": 66961,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21640:40:143",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 66956,
                  "id": 66962,
                  "nodeType": "Return",
                  "src": "21633:47:143"
                }
              ]
            },
            "baseFunctions": [
              46961
            ],
            "documentation": {
              "id": 66949,
              "nodeType": "StructuredDocumentation",
              "src": "21334:180:143",
              "text": " @dev Returns the normalized variable debt per unit of asset\n @param reserveId The min id of the reserve\n @return The reserve normalized variable debt"
            },
            "functionSelector": "9034c18c",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getReserveNormalizedVariableDebt",
            "nameLocation": "21529:32:143",
            "overrides": {
              "id": 66953,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "21595:8:143"
            },
            "parameters": {
              "id": 66952,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66951,
                  "mutability": "mutable",
                  "name": "reserveId",
                  "nameLocation": "21570:9:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66964,
                  "src": "21562:17:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66950,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21562:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21561:19:143"
            },
            "returnParameters": {
              "id": 66956,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66955,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 66964,
                  "src": "21613:7:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66954,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21613:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21612:9:143"
            },
            "scope": 67262,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 66983,
            "nodeType": "FunctionDefinition",
            "src": "21899:185:143",
            "nodes": [],
            "body": {
              "id": 66982,
              "nodeType": "Block",
              "src": "22007:77:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 66979,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 66969,
                        "src": "22071:4:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "baseExpression": {
                          "id": 66975,
                          "name": "_reserves",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 67288,
                          "src": "22025:9:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                            "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                          }
                        },
                        "id": 66977,
                        "indexExpression": {
                          "id": 66976,
                          "name": "reserveId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 66967,
                          "src": "22035:9:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "22025:20:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Reserve_$63713_storage",
                          "typeString": "struct DataTypes.Reserve storage ref"
                        }
                      },
                      "id": 66978,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "22046:24:143",
                      "memberName": "getReserveUserStableRate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 60835,
                      "src": "22025:45:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Reserve_$63713_storage_ptr_$_t_address_$returns$_t_uint256_$bound_to$_t_struct$_Reserve_$63713_storage_ptr_$",
                        "typeString": "function (struct DataTypes.Reserve storage pointer,address) view returns (uint256)"
                      }
                    },
                    "id": 66980,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22025:51:143",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 66974,
                  "id": 66981,
                  "nodeType": "Return",
                  "src": "22018:58:143"
                }
              ]
            },
            "baseFunctions": [
              46907
            ],
            "documentation": {
              "id": 66965,
              "nodeType": "StructuredDocumentation",
              "src": "21696:197:143",
              "text": " @dev Returns the reserve user stable rate\n @param reserveId The min id of the reserve\n @param user The address of the user\n @return The reserve user stable rate"
            },
            "functionSelector": "2e4e8eb4",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getReserveUserStableRate",
            "nameLocation": "21908:24:143",
            "overrides": {
              "id": 66971,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "21980:8:143"
            },
            "parameters": {
              "id": 66970,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66967,
                  "mutability": "mutable",
                  "name": "reserveId",
                  "nameLocation": "21941:9:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66983,
                  "src": "21933:17:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66966,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21933:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66969,
                  "mutability": "mutable",
                  "name": "user",
                  "nameLocation": "21960:4:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 66983,
                  "src": "21952:12:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 66968,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21952:7:143",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21932:33:143"
            },
            "returnParameters": {
              "id": 66974,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66973,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 66983,
                  "src": "21998:7:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66972,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21998:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21997:9:143"
            },
            "scope": 67262,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 67005,
            "nodeType": "FunctionDefinition",
            "src": "22246:285:143",
            "nodes": [],
            "body": {
              "id": 67004,
              "nodeType": "Block",
              "src": "22460:71:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "expression": {
                          "baseExpression": {
                            "id": 66997,
                            "name": "_reserves",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 67288,
                            "src": "22478:9:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                              "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                            }
                          },
                          "id": 66999,
                          "indexExpression": {
                            "id": 66998,
                            "name": "reserveId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66986,
                            "src": "22488:9:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "22478:20:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Reserve_$63713_storage",
                            "typeString": "struct DataTypes.Reserve storage ref"
                          }
                        },
                        "id": 67000,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "22499:13:143",
                        "memberName": "configuration",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 63680,
                        "src": "22478:34:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveConfigurationMap_$63746_storage",
                          "typeString": "struct DataTypes.ReserveConfigurationMap storage ref"
                        }
                      },
                      "id": 67001,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "22513:8:143",
                      "memberName": "getFlags",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 56338,
                      "src": "22478:43:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_ReserveConfigurationMap_$63746_storage_ptr_$returns$_t_bool_$_t_bool_$_t_bool_$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$63746_storage_ptr_$",
                        "typeString": "function (struct DataTypes.ReserveConfigurationMap storage pointer) view returns (bool,bool,bool,bool)"
                      }
                    },
                    "id": 67002,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22478:45:143",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bool_$_t_bool_$_t_bool_$",
                      "typeString": "tuple(bool,bool,bool,bool)"
                    }
                  },
                  "functionReturnParameters": 66996,
                  "id": 67003,
                  "nodeType": "Return",
                  "src": "22471:52:143"
                }
              ]
            },
            "documentation": {
              "id": 66984,
              "nodeType": "StructuredDocumentation",
              "src": "22092:148:143",
              "text": " @dev Returns the state of the resev\n @param reserveId The min id of the reserve\n @return The reserve user stable rate"
            },
            "functionSelector": "993ff816",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getReserveFlags",
            "nameLocation": "22255:15:143",
            "parameters": {
              "id": 66987,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66986,
                  "mutability": "mutable",
                  "name": "reserveId",
                  "nameLocation": "22279:9:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 67005,
                  "src": "22271:17:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66985,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22271:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "22270:19:143"
            },
            "returnParameters": {
              "id": 66996,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 66989,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67005,
                  "src": "22379:4:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 66988,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "22379:4:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66991,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67005,
                  "src": "22399:4:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 66990,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "22399:4:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66993,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67005,
                  "src": "22418:4:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 66992,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "22418:4:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 66995,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67005,
                  "src": "22438:4:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 66994,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "22438:4:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "22364:89:143"
            },
            "scope": 67262,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 67024,
            "nodeType": "FunctionDefinition",
            "src": "22812:219:143",
            "nodes": [],
            "body": {
              "id": 67023,
              "nodeType": "Block",
              "src": "22958:73:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 67021,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 67016,
                          "name": "_reserves",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 67288,
                          "src": "22969:9:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                            "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                          }
                        },
                        "id": 67018,
                        "indexExpression": {
                          "id": 67017,
                          "name": "reserveId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 67008,
                          "src": "22979:9:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "22969:20:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Reserve_$63713_storage",
                          "typeString": "struct DataTypes.Reserve storage ref"
                        }
                      },
                      "id": 67019,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "22990:19:143",
                      "memberName": "interestRateAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 63692,
                      "src": "22969:40:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 67020,
                      "name": "rateAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67010,
                      "src": "23012:11:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "22969:54:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 67022,
                  "nodeType": "ExpressionStatement",
                  "src": "22969:54:143"
                }
              ]
            },
            "baseFunctions": [
              47024
            ],
            "documentation": {
              "id": 67006,
              "nodeType": "StructuredDocumentation",
              "src": "22539:267:143",
              "text": " @dev Updates the address of the interest rate strategy contract\n - Only callable by the Configurator contract\n @param reserveId The min id of the reserve\n @param rateAddress The address of the interest rate strategy contract*"
            },
            "functionSelector": "19322775",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 67014,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 67013,
                  "name": "onlyConfigurator",
                  "nameLocations": [
                    "22936:16:143"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 66109,
                  "src": "22936:16:143"
                },
                "nodeType": "ModifierInvocation",
                "src": "22936:16:143"
              }
            ],
            "name": "setReserveInterestRateAddress",
            "nameLocation": "22821:29:143",
            "overrides": {
              "id": 67012,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "22918:8:143"
            },
            "parameters": {
              "id": 67011,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67008,
                  "mutability": "mutable",
                  "name": "reserveId",
                  "nameLocation": "22859:9:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 67024,
                  "src": "22851:17:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67007,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22851:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67010,
                  "mutability": "mutable",
                  "name": "rateAddress",
                  "nameLocation": "22878:11:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 67024,
                  "src": "22870:19:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 67009,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "22870:7:143",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "22850:40:143"
            },
            "returnParameters": {
              "id": 67015,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "22958:0:143"
            },
            "scope": 67262,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 67044,
            "nodeType": "FunctionDefinition",
            "src": "23289:184:143",
            "nodes": [],
            "body": {
              "id": 67043,
              "nodeType": "Block",
              "src": "23399:74:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 67041,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "expression": {
                          "baseExpression": {
                            "id": 67035,
                            "name": "_reserves",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 67288,
                            "src": "23410:9:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                              "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                            }
                          },
                          "id": 67037,
                          "indexExpression": {
                            "id": 67036,
                            "name": "reserveId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 67027,
                            "src": "23420:9:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "23410:20:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Reserve_$63713_storage",
                            "typeString": "struct DataTypes.Reserve storage ref"
                          }
                        },
                        "id": 67038,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "23431:13:143",
                        "memberName": "configuration",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 63680,
                        "src": "23410:34:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ReserveConfigurationMap_$63746_storage",
                          "typeString": "struct DataTypes.ReserveConfigurationMap storage ref"
                        }
                      },
                      "id": 67039,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "23445:4:143",
                      "memberName": "data",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 63745,
                      "src": "23410:39:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 67040,
                      "name": "configuration",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67029,
                      "src": "23452:13:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "23410:55:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 67042,
                  "nodeType": "ExpressionStatement",
                  "src": "23410:55:143"
                }
              ]
            },
            "baseFunctions": [
              47031
            ],
            "documentation": {
              "id": 67025,
              "nodeType": "StructuredDocumentation",
              "src": "23039:244:143",
              "text": " @dev Sets the configuration bitmap of the reserve as a whole\n - Only callable by the Configurator contract\n @param reserveId The min id of the reserve\n @param configuration The new configuration bitmap*"
            },
            "functionSelector": "89a7245d",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 67033,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 67032,
                  "name": "onlyConfigurator",
                  "nameLocations": [
                    "23382:16:143"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 66109,
                  "src": "23382:16:143"
                },
                "nodeType": "ModifierInvocation",
                "src": "23382:16:143"
              }
            ],
            "name": "setReserveConfiguration",
            "nameLocation": "23298:23:143",
            "overrides": {
              "id": 67031,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "23373:8:143"
            },
            "parameters": {
              "id": 67030,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67027,
                  "mutability": "mutable",
                  "name": "reserveId",
                  "nameLocation": "23330:9:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 67044,
                  "src": "23322:17:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67026,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23322:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67029,
                  "mutability": "mutable",
                  "name": "configuration",
                  "nameLocation": "23349:13:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 67044,
                  "src": "23341:21:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67028,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23341:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "23321:42:143"
            },
            "returnParameters": {
              "id": 67034,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "23399:0:143"
            },
            "scope": 67262,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 67065,
            "nodeType": "FunctionDefinition",
            "src": "23481:201:143",
            "nodes": [],
            "body": {
              "id": 67064,
              "nodeType": "Block",
              "src": "23586:96:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 67061,
                        "name": "creator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67048,
                        "src": "23666:7:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "expression": {
                              "baseExpression": {
                                "id": 67055,
                                "name": "_reserves",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 67288,
                                "src": "23605:9:143",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                                  "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                                }
                              },
                              "id": 67057,
                              "indexExpression": {
                                "id": 67056,
                                "name": "reserveId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 67046,
                                "src": "23615:9:143",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "23605:20:143",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Reserve_$63713_storage",
                                "typeString": "struct DataTypes.Reserve storage ref"
                              }
                            },
                            "id": 67058,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "23626:13:143",
                            "memberName": "fTokenAddress",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 63686,
                            "src": "23605:34:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 67054,
                          "name": "IFToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 46422,
                          "src": "23597:7:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IFToken_$46422_$",
                            "typeString": "type(contract IFToken)"
                          }
                        },
                        "id": 67059,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "23597:43:143",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IFToken_$46422",
                          "typeString": "contract IFToken"
                        }
                      },
                      "id": 67060,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "23641:24:143",
                      "memberName": "setReserveCreatorAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46361,
                      "src": "23597:68:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 67062,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23597:77:143",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 67063,
                  "nodeType": "ExpressionStatement",
                  "src": "23597:77:143"
                }
              ]
            },
            "baseFunctions": [
              47038
            ],
            "functionSelector": "bbce5cf3",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 67052,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 67051,
                  "name": "onlyConfigurator",
                  "nameLocations": [
                    "23569:16:143"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 66109,
                  "src": "23569:16:143"
                },
                "nodeType": "ModifierInvocation",
                "src": "23569:16:143"
              }
            ],
            "name": "setReserveCreatorAddress",
            "nameLocation": "23490:24:143",
            "overrides": {
              "id": 67050,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "23560:8:143"
            },
            "parameters": {
              "id": 67049,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67046,
                  "mutability": "mutable",
                  "name": "reserveId",
                  "nameLocation": "23523:9:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 67065,
                  "src": "23515:17:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67045,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23515:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67048,
                  "mutability": "mutable",
                  "name": "creator",
                  "nameLocation": "23542:7:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 67065,
                  "src": "23534:15:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 67047,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "23534:7:143",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "23514:36:143"
            },
            "returnParameters": {
              "id": 67053,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "23586:0:143"
            },
            "scope": 67262,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 67086,
            "nodeType": "FunctionDefinition",
            "src": "23690:213:143",
            "nodes": [],
            "body": {
              "id": 67085,
              "nodeType": "Block",
              "src": "23801:102:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 67082,
                        "name": "percentage",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67069,
                        "src": "23884:10:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "expression": {
                              "baseExpression": {
                                "id": 67076,
                                "name": "_reserves",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 67288,
                                "src": "23820:9:143",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                                  "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                                }
                              },
                              "id": 67078,
                              "indexExpression": {
                                "id": 67077,
                                "name": "reserveId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 67067,
                                "src": "23830:9:143",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "23820:20:143",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Reserve_$63713_storage",
                                "typeString": "struct DataTypes.Reserve storage ref"
                              }
                            },
                            "id": 67079,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "23841:13:143",
                            "memberName": "fTokenAddress",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 63686,
                            "src": "23820:34:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 67075,
                          "name": "IFToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 46422,
                          "src": "23812:7:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IFToken_$46422_$",
                            "typeString": "type(contract IFToken)"
                          }
                        },
                        "id": 67080,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "23812:43:143",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IFToken_$46422",
                          "typeString": "contract IFToken"
                        }
                      },
                      "id": 67081,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "23856:27:143",
                      "memberName": "setReserveCreatorPercentage",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46371,
                      "src": "23812:71:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256) external"
                      }
                    },
                    "id": 67083,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23812:83:143",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 67084,
                  "nodeType": "ExpressionStatement",
                  "src": "23812:83:143"
                }
              ]
            },
            "baseFunctions": [
              47045
            ],
            "functionSelector": "e49c8a52",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 67073,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 67072,
                  "name": "onlyConfigurator",
                  "nameLocations": [
                    "23784:16:143"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 66109,
                  "src": "23784:16:143"
                },
                "nodeType": "ModifierInvocation",
                "src": "23784:16:143"
              }
            ],
            "name": "setReserveCreatorPercentage",
            "nameLocation": "23699:27:143",
            "overrides": {
              "id": 67071,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "23775:8:143"
            },
            "parameters": {
              "id": 67070,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67067,
                  "mutability": "mutable",
                  "name": "reserveId",
                  "nameLocation": "23735:9:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 67086,
                  "src": "23727:17:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67066,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23727:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67069,
                  "mutability": "mutable",
                  "name": "percentage",
                  "nameLocation": "23754:10:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 67086,
                  "src": "23746:18:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67068,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23746:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "23726:39:143"
            },
            "returnParameters": {
              "id": 67074,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "23801:0:143"
            },
            "scope": 67262,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 67105,
            "nodeType": "FunctionDefinition",
            "src": "23913:252:143",
            "nodes": [],
            "body": {
              "id": 67104,
              "nodeType": "Block",
              "src": "24012:153:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 67099,
                        "name": "_addressProvider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67283,
                        "src": "24081:16:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                          "typeString": "contract IAddressProvider"
                        }
                      },
                      {
                        "id": 67100,
                        "name": "_reserves",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67288,
                        "src": "24113:9:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                          "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                        }
                      },
                      {
                        "id": 67101,
                        "name": "borrowId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67088,
                        "src": "24138:8:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                          "typeString": "contract IAddressProvider"
                        },
                        {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                          "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 67097,
                        "name": "LiquidateLogic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 60459,
                        "src": "24030:14:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_LiquidateLogic_$60459_$",
                          "typeString": "type(library LiquidateLogic)"
                        }
                      },
                      "id": 67098,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "24045:21:143",
                      "memberName": "getBorrowHealthFactor",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 60458,
                      "src": "24030:36:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_view$_t_contract$_IAddressProvider_$45420_$_t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$",
                        "typeString": "function (contract IAddressProvider,mapping(uint256 => struct DataTypes.Reserve storage ref),uint256) view returns (uint256,uint256,uint256)"
                      }
                    },
                    "id": 67102,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24030:127:143",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 67096,
                  "id": 67103,
                  "nodeType": "Return",
                  "src": "24023:134:143"
                }
              ]
            },
            "baseFunctions": [
              47056
            ],
            "functionSelector": "c46a90f5",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getBorrowHealthFactor",
            "nameLocation": "23922:21:143",
            "parameters": {
              "id": 67089,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67088,
                  "mutability": "mutable",
                  "name": "borrowId",
                  "nameLocation": "23952:8:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 67105,
                  "src": "23944:16:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67087,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23944:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "23943:18:143"
            },
            "returnParameters": {
              "id": 67096,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67091,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67105,
                  "src": "23985:7:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67090,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23985:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67093,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67105,
                  "src": "23994:7:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67092,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23994:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67095,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67105,
                  "src": "24003:7:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67094,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "24003:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "23984:27:143"
            },
            "scope": 67262,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 67130,
            "nodeType": "FunctionDefinition",
            "src": "24173:280:143",
            "nodes": [],
            "body": {
              "id": 67129,
              "nodeType": "Block",
              "src": "24275:178:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "components": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "expression": {
                              "baseExpression": {
                                "id": 67115,
                                "name": "_reserves",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 67288,
                                "src": "24308:9:143",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                                  "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                                }
                              },
                              "id": 67117,
                              "indexExpression": {
                                "id": 67116,
                                "name": "reserveId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 67107,
                                "src": "24318:9:143",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "24308:20:143",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Reserve_$63713_storage",
                                "typeString": "struct DataTypes.Reserve storage ref"
                              }
                            },
                            "id": 67118,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "24329:13:143",
                            "memberName": "configuration",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 63680,
                            "src": "24308:34:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ReserveConfigurationMap_$63746_storage",
                              "typeString": "struct DataTypes.ReserveConfigurationMap storage ref"
                            }
                          },
                          "id": 67119,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "24343:19:143",
                          "memberName": "getLiquidationBonus",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 55827,
                          "src": "24308:54:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_struct$_ReserveConfigurationMap_$63746_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$63746_storage_ptr_$",
                            "typeString": "function (struct DataTypes.ReserveConfigurationMap storage pointer) view returns (uint256)"
                          }
                        },
                        "id": 67120,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "24308:56:143",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "expression": {
                              "baseExpression": {
                                "id": 67121,
                                "name": "_reserves",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 67288,
                                "src": "24379:9:143",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Reserve_$63713_storage_$",
                                  "typeString": "mapping(uint256 => struct DataTypes.Reserve storage ref)"
                                }
                              },
                              "id": 67123,
                              "indexExpression": {
                                "id": 67122,
                                "name": "reserveId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 67107,
                                "src": "24389:9:143",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "24379:20:143",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Reserve_$63713_storage",
                                "typeString": "struct DataTypes.Reserve storage ref"
                              }
                            },
                            "id": 67124,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "24400:13:143",
                            "memberName": "configuration",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 63680,
                            "src": "24379:34:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ReserveConfigurationMap_$63746_storage",
                              "typeString": "struct DataTypes.ReserveConfigurationMap storage ref"
                            }
                          },
                          "id": 67125,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "24414:18:143",
                          "memberName": "getAuctionDuration",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 56202,
                          "src": "24379:53:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_struct$_ReserveConfigurationMap_$63746_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$63746_storage_ptr_$",
                            "typeString": "function (struct DataTypes.ReserveConfigurationMap storage pointer) view returns (uint256)"
                          }
                        },
                        "id": 67126,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "24379:55:143",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 67127,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "24293:152:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 67114,
                  "id": 67128,
                  "nodeType": "Return",
                  "src": "24286:159:143"
                }
              ]
            },
            "baseFunctions": [
              46891
            ],
            "functionSelector": "a58497a5",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getAuctionConfiguration",
            "nameLocation": "24182:23:143",
            "overrides": {
              "id": 67109,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "24239:8:143"
            },
            "parameters": {
              "id": 67108,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67107,
                  "mutability": "mutable",
                  "name": "reserveId",
                  "nameLocation": "24214:9:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 67130,
                  "src": "24206:17:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67106,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "24206:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "24205:19:143"
            },
            "returnParameters": {
              "id": 67114,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67111,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67130,
                  "src": "24257:7:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67110,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "24257:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67113,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67130,
                  "src": "24266:7:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67112,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "24266:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "24256:18:143"
            },
            "scope": 67262,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 67150,
            "nodeType": "FunctionDefinition",
            "src": "24714:164:143",
            "nodes": [],
            "body": {
              "id": 67149,
              "nodeType": "Block",
              "src": "24822:56:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "expression": {
                        "id": 67145,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -28,
                        "src": "24840:4:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_LendingPool_$67262",
                          "typeString": "contract LendingPool"
                        }
                      },
                      "id": 67146,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "24845:16:143",
                      "memberName": "onERC721Received",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 67150,
                      "src": "24840:21:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                        "typeString": "function (address,address,uint256,bytes memory) external returns (bytes4)"
                      }
                    },
                    "id": 67147,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberLocation": "24862:8:143",
                    "memberName": "selector",
                    "nodeType": "MemberAccess",
                    "src": "24840:30:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "functionReturnParameters": 67144,
                  "id": 67148,
                  "nodeType": "Return",
                  "src": "24833:37:143"
                }
              ]
            },
            "baseFunctions": [
              28518
            ],
            "documentation": {
              "id": 67131,
              "nodeType": "StructuredDocumentation",
              "src": "24461:247:143",
              "text": "@notice For the receiving of ERC721 tokens to this contract address.\n @dev An ERC721 `safeTransferFrom` will revert unless this Solidity selector is returned.\n @return Always returns `IERC721Receiver.onERC721Received.selector`."
            },
            "functionSelector": "150b7a02",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "onERC721Received",
            "nameLocation": "24723:16:143",
            "overrides": {
              "id": 67141,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "24796:8:143"
            },
            "parameters": {
              "id": 67140,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67133,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67150,
                  "src": "24740:7:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 67132,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "24740:7:143",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67135,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67150,
                  "src": "24749:7:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 67134,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "24749:7:143",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67137,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67150,
                  "src": "24758:7:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67136,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "24758:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67139,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67150,
                  "src": "24767:12:143",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 67138,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "24767:5:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "24739:41:143"
            },
            "returnParameters": {
              "id": 67144,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67143,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67150,
                  "src": "24814:6:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 67142,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "24814:6:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "24813:8:143"
            },
            "scope": 67262,
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "id": 67172,
            "nodeType": "FunctionDefinition",
            "src": "25143:175:143",
            "nodes": [],
            "body": {
              "id": 67171,
              "nodeType": "Block",
              "src": "25261:57:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "expression": {
                        "id": 67167,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -28,
                        "src": "25279:4:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_LendingPool_$67262",
                          "typeString": "contract LendingPool"
                        }
                      },
                      "id": 67168,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "25284:17:143",
                      "memberName": "onERC1155Received",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 67172,
                      "src": "25279:22:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                        "typeString": "function (address,address,uint256,uint256,bytes memory) external returns (bytes4)"
                      }
                    },
                    "id": 67169,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberLocation": "25302:8:143",
                    "memberName": "selector",
                    "nodeType": "MemberAccess",
                    "src": "25279:31:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "functionReturnParameters": 67166,
                  "id": 67170,
                  "nodeType": "Return",
                  "src": "25272:38:143"
                }
              ]
            },
            "baseFunctions": [
              26358
            ],
            "documentation": {
              "id": 67151,
              "nodeType": "StructuredDocumentation",
              "src": "24886:251:143",
              "text": "@notice For the receiving of ERC1155 tokens to this contract address.\n @dev An ERC1155 `safeTransferFrom` will revert unless this Solidity selector is returned.\n @return Always returns `IERC1155Receiver.onERC1155Received.selector`."
            },
            "functionSelector": "f23a6e61",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "onERC1155Received",
            "nameLocation": "25152:17:143",
            "overrides": {
              "id": 67163,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "25235:8:143"
            },
            "parameters": {
              "id": 67162,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67153,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67172,
                  "src": "25170:7:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 67152,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "25170:7:143",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67155,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67172,
                  "src": "25179:7:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 67154,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "25179:7:143",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67157,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67172,
                  "src": "25188:7:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67156,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25188:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67159,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67172,
                  "src": "25197:7:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67158,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25197:7:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67161,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67172,
                  "src": "25206:12:143",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 67160,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "25206:5:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "25169:50:143"
            },
            "returnParameters": {
              "id": 67166,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67165,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67172,
                  "src": "25253:6:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 67164,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "25253:6:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "25252:8:143"
            },
            "scope": 67262,
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "id": 67197,
            "nodeType": "FunctionDefinition",
            "src": "25608:213:143",
            "nodes": [],
            "body": {
              "id": 67196,
              "nodeType": "Block",
              "src": "25757:64:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 67192,
                          "name": "Errors",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 56900,
                          "src": "25775:6:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Errors_$56900_$",
                            "typeString": "type(library Errors)"
                          }
                        },
                        "id": 67193,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "25782:30:143",
                        "memberName": "CT_ERC1155_BATCH_NOT_SUPPORTED",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 56746,
                        "src": "25775:37:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 67191,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -19,
                        -19
                      ],
                      "referencedDeclaration": -19,
                      "src": "25768:6:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 67194,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25768:45:143",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 67195,
                  "nodeType": "ExpressionStatement",
                  "src": "25768:45:143"
                }
              ]
            },
            "baseFunctions": [
              26376
            ],
            "documentation": {
              "id": 67173,
              "nodeType": "StructuredDocumentation",
              "src": "25326:276:143",
              "text": "@notice For the receiving of multiple ERC1155 tokens types to this contract address.\n @dev An ERC1155 `safeBatchTransferFrom` will revert unless this Solidity selector is returned.\n @return Always returns `IERC1155Receiver.onERC1155BatchReceived.selector`."
            },
            "functionSelector": "bc197c81",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "onERC1155BatchReceived",
            "nameLocation": "25617:22:143",
            "overrides": {
              "id": 67187,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "25731:8:143"
            },
            "parameters": {
              "id": 67186,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67175,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67197,
                  "src": "25640:7:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 67174,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "25640:7:143",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67177,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67197,
                  "src": "25649:7:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 67176,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "25649:7:143",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67180,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67197,
                  "src": "25658:18:143",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 67178,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "25658:7:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 67179,
                    "nodeType": "ArrayTypeName",
                    "src": "25658:9:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67183,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67197,
                  "src": "25678:18:143",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 67181,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "25678:7:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 67182,
                    "nodeType": "ArrayTypeName",
                    "src": "25678:9:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67185,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67197,
                  "src": "25698:14:143",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 67184,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "25698:5:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "25639:74:143"
            },
            "returnParameters": {
              "id": 67190,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67189,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67197,
                  "src": "25749:6:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 67188,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "25749:6:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "25748:8:143"
            },
            "scope": 67262,
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "external"
          },
          {
            "id": 67228,
            "nodeType": "FunctionDefinition",
            "src": "26036:338:143",
            "nodes": [],
            "body": {
              "id": 67227,
              "nodeType": "Block",
              "src": "26128:246:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 67225,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 67218,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 67211,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 67206,
                          "name": "_interfaceId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 67200,
                          "src": "26159:12:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "expression": {
                            "arguments": [
                              {
                                "id": 67208,
                                "name": "IERC1155ReceiverUpgradeable",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 26377,
                                "src": "26180:27:143",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC1155ReceiverUpgradeable_$26377_$",
                                  "typeString": "type(contract IERC1155ReceiverUpgradeable)"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_type$_t_contract$_IERC1155ReceiverUpgradeable_$26377_$",
                                  "typeString": "type(contract IERC1155ReceiverUpgradeable)"
                                }
                              ],
                              "id": 67207,
                              "name": "type",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -27,
                              "src": "26175:4:143",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 67209,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "26175:33:143",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_meta_type_t_contract$_IERC1155ReceiverUpgradeable_$26377",
                              "typeString": "type(contract IERC1155ReceiverUpgradeable)"
                            }
                          },
                          "id": 67210,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberLocation": "26209:11:143",
                          "memberName": "interfaceId",
                          "nodeType": "MemberAccess",
                          "src": "26175:45:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "26159:61:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "||",
                      "rightExpression": {
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 67217,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 67212,
                          "name": "_interfaceId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 67200,
                          "src": "26237:12:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "expression": {
                            "arguments": [
                              {
                                "id": 67214,
                                "name": "IERC721ReceiverUpgradeable",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 28519,
                                "src": "26258:26:143",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC721ReceiverUpgradeable_$28519_$",
                                  "typeString": "type(contract IERC721ReceiverUpgradeable)"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_type$_t_contract$_IERC721ReceiverUpgradeable_$28519_$",
                                  "typeString": "type(contract IERC721ReceiverUpgradeable)"
                                }
                              ],
                              "id": 67213,
                              "name": "type",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -27,
                              "src": "26253:4:143",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 67215,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "26253:32:143",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_meta_type_t_contract$_IERC721ReceiverUpgradeable_$28519",
                              "typeString": "type(contract IERC721ReceiverUpgradeable)"
                            }
                          },
                          "id": 67216,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberLocation": "26286:11:143",
                          "memberName": "interfaceId",
                          "nodeType": "MemberAccess",
                          "src": "26253:44:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "26237:60:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "26159:138:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      },
                      "id": 67224,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 67219,
                        "name": "_interfaceId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67200,
                        "src": "26314:12:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "expression": {
                          "arguments": [
                            {
                              "id": 67221,
                              "name": "IERC165Upgradeable",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29293,
                              "src": "26335:18:143",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IERC165Upgradeable_$29293_$",
                                "typeString": "type(contract IERC165Upgradeable)"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_type$_t_contract$_IERC165Upgradeable_$29293_$",
                                "typeString": "type(contract IERC165Upgradeable)"
                              }
                            ],
                            "id": 67220,
                            "name": "type",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -27,
                            "src": "26330:4:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 67222,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "26330:24:143",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_meta_type_t_contract$_IERC165Upgradeable_$29293",
                            "typeString": "type(contract IERC165Upgradeable)"
                          }
                        },
                        "id": 67223,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "26355:11:143",
                        "memberName": "interfaceId",
                        "nodeType": "MemberAccess",
                        "src": "26330:36:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "src": "26314:52:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "26159:207:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 67205,
                  "id": 67226,
                  "nodeType": "Return",
                  "src": "26139:227:143"
                }
              ]
            },
            "baseFunctions": [
              29292
            ],
            "documentation": {
              "id": 67198,
              "nodeType": "StructuredDocumentation",
              "src": "25829:201:143",
              "text": "@dev Checks whether this contract implements the interface defined by `interfaceId`.\n @param _interfaceId Id of the interface\n @return true if this contract implements the interface"
            },
            "functionSelector": "01ffc9a7",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "supportsInterface",
            "nameLocation": "26045:17:143",
            "overrides": {
              "id": 67202,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "26104:8:143"
            },
            "parameters": {
              "id": 67201,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67200,
                  "mutability": "mutable",
                  "name": "_interfaceId",
                  "nameLocation": "26070:12:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 67228,
                  "src": "26063:19:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 67199,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "26063:6:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "26062:21:143"
            },
            "returnParameters": {
              "id": 67205,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67204,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67228,
                  "src": "26122:4:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 67203,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "26122:4:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "26121:6:143"
            },
            "scope": 67262,
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "id": 67242,
            "nodeType": "FunctionDefinition",
            "src": "26415:153:143",
            "nodes": [],
            "body": {
              "id": 67241,
              "nodeType": "Block",
              "src": "26491:77:143",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 67239,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 67235,
                      "name": "forwarder",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67230,
                      "src": "26509:9:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 67236,
                          "name": "_addressProvider",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 67283,
                          "src": "26522:16:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IAddressProvider_$45420",
                            "typeString": "contract IAddressProvider"
                          }
                        },
                        "id": 67237,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "26539:19:143",
                        "memberName": "getExecutionManager",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 45169,
                        "src": "26522:36:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                          "typeString": "function () view external returns (address)"
                        }
                      },
                      "id": 67238,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "26522:38:143",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "26509:51:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 67234,
                  "id": 67240,
                  "nodeType": "Return",
                  "src": "26502:58:143"
                }
              ]
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isTrustedForwarder",
            "nameLocation": "26424:18:143",
            "parameters": {
              "id": 67231,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67230,
                  "mutability": "mutable",
                  "name": "forwarder",
                  "nameLocation": "26451:9:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 67242,
                  "src": "26443:17:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 67229,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "26443:7:143",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "26442:19:143"
            },
            "returnParameters": {
              "id": 67234,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67233,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67242,
                  "src": "26485:4:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 67232,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "26485:4:143",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "26484:6:143"
            },
            "scope": 67262,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 67261,
            "nodeType": "FunctionDefinition",
            "src": "26576:410:143",
            "nodes": [],
            "body": {
              "id": 67260,
              "nodeType": "Block",
              "src": "26654:332:143",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 67249,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "26688:3:143",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 67250,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "26692:6:143",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "26688:10:143",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 67248,
                      "name": "isTrustedForwarder",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67242,
                      "src": "26669:18:143",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) view returns (bool)"
                      }
                    },
                    "id": 67251,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26669:30:143",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 67258,
                    "nodeType": "Block",
                    "src": "26927:52:143",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 67254,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "26949:5:143",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_super$_LendingPool_$67262_$",
                                "typeString": "type(contract super LendingPool)"
                              }
                            },
                            "id": 67255,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "26955:10:143",
                            "memberName": "_msgSender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 28973,
                            "src": "26949:16:143",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                              "typeString": "function () view returns (address)"
                            }
                          },
                          "id": 67256,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "26949:18:143",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 67247,
                        "id": 67257,
                        "nodeType": "Return",
                        "src": "26942:25:143"
                      }
                    ]
                  },
                  "id": 67259,
                  "nodeType": "IfStatement",
                  "src": "26665:314:143",
                  "trueBody": {
                    "id": 67253,
                    "nodeType": "Block",
                    "src": "26701:220:143",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "26820:90:143",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "26839:56:143",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "26853:2:143",
                                    "type": "",
                                    "value": "96"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [],
                                            "functionName": {
                                              "name": "calldatasize",
                                              "nodeType": "YulIdentifier",
                                              "src": "26874:12:143"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "26874:14:143"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "26890:2:143",
                                            "type": "",
                                            "value": "20"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sub",
                                          "nodeType": "YulIdentifier",
                                          "src": "26870:3:143"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "26870:23:143"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "calldataload",
                                      "nodeType": "YulIdentifier",
                                      "src": "26857:12:143"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "26857:37:143"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "26849:3:143"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "26849:46:143"
                              },
                              "variableNames": [
                                {
                                  "name": "sender",
                                  "nodeType": "YulIdentifier",
                                  "src": "26839:6:143"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "london",
                        "externalReferences": [
                          {
                            "declaration": 67246,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "26839:6:143",
                            "valueSize": 1
                          }
                        ],
                        "id": 67252,
                        "nodeType": "InlineAssembly",
                        "src": "26811:99:143"
                      }
                    ]
                  }
                }
              ]
            },
            "baseFunctions": [
              28973
            ],
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_msgSender",
            "nameLocation": "26585:10:143",
            "overrides": {
              "id": 67244,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "26620:8:143"
            },
            "parameters": {
              "id": 67243,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "26595:2:143"
            },
            "returnParameters": {
              "id": 67247,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67246,
                  "mutability": "mutable",
                  "name": "sender",
                  "nameLocation": "26646:6:143",
                  "nodeType": "VariableDeclaration",
                  "scope": 67261,
                  "src": "26638:14:143",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 67245,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "26638:7:143",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "26637:16:143"
            },
            "scope": 67262,
            "stateMutability": "view",
            "virtual": true,
            "visibility": "internal"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 66047,
              "name": "ILendingPool",
              "nameLocations": [
                "2529:12:143"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 47057,
              "src": "2529:12:143"
            },
            "id": 66048,
            "nodeType": "InheritanceSpecifier",
            "src": "2529:12:143"
          },
          {
            "baseName": {
              "id": 66049,
              "name": "ContextUpgradeable",
              "nameLocations": [
                "2549:18:143"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 28988,
              "src": "2549:18:143"
            },
            "id": 66050,
            "nodeType": "InheritanceSpecifier",
            "src": "2549:18:143"
          },
          {
            "baseName": {
              "id": 66051,
              "name": "ReentrancyGuardUpgradeable",
              "nameLocations": [
                "2575:26:143"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 26336,
              "src": "2575:26:143"
            },
            "id": 66052,
            "nodeType": "InheritanceSpecifier",
            "src": "2575:26:143"
          },
          {
            "baseName": {
              "id": 66053,
              "name": "IERC721ReceiverUpgradeable",
              "nameLocations": [
                "2608:26:143"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 28519,
              "src": "2608:26:143"
            },
            "id": 66054,
            "nodeType": "InheritanceSpecifier",
            "src": "2608:26:143"
          },
          {
            "baseName": {
              "id": 66055,
              "name": "IERC1155ReceiverUpgradeable",
              "nameLocations": [
                "2641:27:143"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 26377,
              "src": "2641:27:143"
            },
            "id": 66056,
            "nodeType": "InheritanceSpecifier",
            "src": "2641:27:143"
          },
          {
            "baseName": {
              "id": 66057,
              "name": "LendingPoolStorage",
              "nameLocations": [
                "2675:18:143"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 67334,
              "src": "2675:18:143"
            },
            "id": 66058,
            "nodeType": "InheritanceSpecifier",
            "src": "2675:18:143"
          }
        ],
        "canonicalName": "LendingPool",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 66046,
          "nodeType": "StructuredDocumentation",
          "src": "2211:288:143",
          "text": "@title Lending Pool contract for instant, permissionless NFT-backed loans\n @author FluidNFT\n @notice Allows for the borrow/repay of loans and deposit/withdraw of assets.\n @dev This is our protocol's point of access.\n - For Upgradeable DO NOT ADJUST inheritance order"
        },
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          67262,
          67334,
          26377,
          29293,
          28519,
          26336,
          28988,
          26136,
          47057
        ],
        "name": "LendingPool",
        "nameLocation": "2508:11:143",
        "scope": 67263,
        "usedErrors": []
      }
    ],
    "license": "AGPL-3.0"
  },
  "id": 143
}
```

</details>


# ILendingPool

{% tabs %}
{% tab title="ILendingPool.sol" %}

```solidity
// SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.16;

import { IAddressProvider } from "../interfaces/IAddressProvider.sol";

import { ConfigTypes } from "../protocol/libraries/types/ConfigTypes.sol";
import { DataTypes } from "../protocol/libraries/types/DataTypes.sol";

interface ILendingPool {
    /**
     * @dev Emitted when the pause is triggered.
     */
    event Paused();

    /**
     * @dev Emitted when the pause is lifted.
     */
    event Unpaused();

    /**
     * @dev Emitted when the pause time is updated.
     */
    event PausedTimeUpdated(uint256 startTime, uint256 durationTime);

    /**
     * @notice Emitted when an asset deposit is made.
     * @param initiator The address initiating the deposit. 
     * @param collateral The Lending Pool underlying reserve collateral.
     * @param asset The ERC20, reserve asset address.
     * @param amount The amount of ERC20 tokens.
     * @param onBehalfOf The address that will receive the fTokens, same as msg.sender if the user wants to receive them on their own wallet, different if the benefitiary is a different wallet.
     * @param referalCode Code used to register the integrator originating the operation, for potential rewards. 0 if the action is executed directly by the user, without any middle-man
     **/ 
    event Deposit(
        address initiator,
        address collateral,
        address asset, 
        uint256 indexed reserveId,
        uint256 amount, 
        address indexed onBehalfOf, 
        uint16 indexed referalCode
    );

    /**
     * @notice Emitted when an asset withdraw is made.
     * @param initiator The address initiating the withdrawl / owner of fTokens.
     * @param collateral The Lending Pool underlying reserve collateral.
     * @param asset The ERC20, reserve asset address.
     * @param amount The amount of ERC20 tokens.
     * @param to The address that will receive the underlying
     **/ 
    event Withdraw(
        address indexed initiator,
        address collateral,
        address asset, 
        uint256 indexed reserveId,
        uint256 amount, 
        address indexed to
    );

 /**
     * @dev Emitted on borrow() when loan needs to be opened
     * @param initiator The address of the user initiating the borrow(), receiving the funds
     * @param reserveId The id of the underlying reserve
     * @param asset The address of the borrowed asset
     * @param amount The amount borrowed
     * @param duration The duration of the loan
     * @param collateral The address of the underlying NFT used as collateral
     * @param tokenId The token id of the underlying NFT used as collateral
     * @param onBehalfOf The address that will be getting the loan
     * @param referral The referral code used
     **/
    event Borrow(
        address initiator,
        uint256 indexed reserveId,
        address asset,
        uint256 amount,
        uint256 duration,
        address collateral,
        uint256 tokenId,
        address indexed onBehalfOf,
        uint256 borrowRate,
        uint256 borrowId,
        uint16 indexed referral
    );

    /**
     * @dev Emitted on repay()
     * @param initiator The address of the user initiating the repay(), providing the funds
     * @param reserveId The id of the underlying reserve
     * @param asset The address of the borrowed asset
     * @param amount The amount repaid
     * @param collateral The address of the underlying NFT used as collateral
     * @param tokenId The token id of the underlying NFT used as collateral
     * @param borrower The beneficiary of the repayment, getting his debt reduced
     * @param borrowId The borrow ID of the NFT borrows
     **/
    event Repay(
        address initiator,
        uint256 indexed reserveId,
        address asset,
        uint256 amount,
        address indexed collateral,
        uint256 tokenId,
        address indexed borrower,
        uint256 borrowId
    );

    /**
     * @dev Emitted on refinance()
     * @param initiator The address of the user initiating the refinance(), providing the funds
     * @param borrower The address of the borrower
     * @param borrowId The id of the borrow
     * @param collateral The address of the underlying NFT used as collateral
     * @param tokenId The token id of the underlying NFT used as collateral
     * @param asset The address of the borrowed asset
     * @param amount The final refinanced amount
     * @param amountAdded The amount added to the original borrow
     * @param amountTaken The amount taken from the original borrow
     * @param defaultFee The fee paid due to refinancing after loan due date (0 if before)
     * @param duration The duration of the refinanced borrow
     * @param timestamp The timestamp of the refinanced borrow
 
     **/
    event Refinanced(
        address initiator,
        address indexed borrower,
        uint256 indexed reserveId,
        uint256 indexed borrowId,
        address collateral,
        uint256 tokenId,
        address asset,
        uint256 amount,
        uint256 amountAdded,
        uint256 amountTaken,
        uint256 defaultFee,
        uint256 duration,
        uint256 timestamp
    );

    /**
     * @dev Emitted when a borrower's loan is liquidated.
     * @param user The address of the user initiating the auction
     * @param reserveId The id of the reserve
     * @param collateral The NFT used as collateral
     * @param tokenId The tokenId of the NFT used as collateral
     * @param borrower The borrower of the liquidated borrow
     * @param borrowId The borrow ID of the NFT borrows
     * @param paymentAsset The asset used for payment by the liquidator
     * @param paymentAmount The amount of paymentAsset paid by the liquidator
     * @param onBehalfOf The address of the user to receive the underlying NFT
     **/
    event Liquidate(
        address user,
        uint256 indexed reserveId,
        address indexed collateral,
        uint256 tokenId,
        address indexed borrower,
        uint256 borrowId,
        address paymentAsset,
        uint256 paymentAmount,
        address onBehalfOf
    );

    function initReserve(
        ConfigTypes.InitReserveInput calldata input,
        address fTokenAddress, 
        address stableDebtTokenAddress,
        address variableDebtTokenAddress
    ) 
        external
        returns (uint256);

    function deposit(
        uint256 amount,
        uint256 reserveId,
        address onBehalfOf,
        uint16 referralCode
    ) 
        external;

    function batchDeposit(
        uint256[] calldata amounts,
        uint256[] calldata reserveIds,
        address[] calldata onBehalfOfs,
        uint16[] calldata referralCodes
    ) 
        external;

    function withdraw(
        uint256 amount,
        uint256 reserveId,
        address to
    ) 
        external;

    function batchWithdraw(
        uint256[] calldata amounts,
        uint256[] calldata reserveIds,
        address[] calldata tos
    ) 
        external;

    function borrow(
        uint256 amount, 
        uint256 tokenId,
        uint256 tokenValue,
        uint256 reserveId,
        uint256 duration,
        address onBehalfOf,
        uint16 referralCode
    )
        external;

    function batchBorrow(
        uint256[] calldata amounts, 
        uint256[] calldata tokenIds,
        uint256[] calldata tokenValues,
        uint256[] calldata reserveIds,
        uint256 duration,
        address onBehalfOf,
        uint16 referralCode
    )
        external;

    function repay(
        uint256 borrowId,
        uint256 amount
    ) 
        external;

    function batchRepay(
        uint256[] calldata borrowIds,
        uint256[] calldata amounts
    ) 
        external;

    function refinance(
        uint256 borrowId,
        uint256 amount,
        uint256 duration
    ) 
        external;

    function batchRefinance(
        uint256[] calldata borrowIds,
        uint256[] calldata amounts,
        uint256[] calldata durations
    ) 
        external;

    function auction(
        uint256 borrowId,
        address onBehalfOf
    ) 
        external;

    function batchAuction(
        uint256[] calldata borrowIds,
        address[] calldata onBehalfOfs
    ) 
        external;

    function bid(
        address asset,
        uint256 amount,
        uint256 borrowId,
        address onBehalfOf
    ) 
        external;

    function batchBid(
        address[] calldata assets,
        uint256[] calldata amounts,
        uint256[] calldata borrowIds,
        address[] calldata onBehalfOfs
    ) 
        external;

    function getReserveConfiguration(
        uint256 reserveId
    )
        external
        returns (DataTypes.ReserveConfigurationMap memory);

    function getAuctionConfiguration(uint256 reserveId) external view returns (uint256, uint256);

    function getReserveNormalizedIncome(
        uint256 reserveId
    )
        external 
        view
        returns (uint256);

    function getReserveUserStableRate(
        uint256 reserveId,
        address user
    ) 
        external 
        view
        returns (uint256);

    /**
     * @dev Set the _pause state of a reserve
     * - Only callable by the LendPool contract
     * @param val `true` to pause the reserve, `false` to un-pause it
     */
    function setPause(bool val) external;

    function setPausedTime(uint256 startTime, uint256 durationTime) external;

    /**
     * @dev Returns if the LendPool is paused
     */
    function paused() external view returns (bool);

    function getPausedTime() external view returns (uint256, uint256);

    function getAddressesProvider() external view returns (IAddressProvider);

    function finalizeTransfer(
        uint256 reserveId,
        address from,
        address to,
        uint256 amount,
        uint256 balanceFromBefore,
        uint256 balanceToBefore
    ) external view;

    function getReserveNormalizedVariableDebt(
        uint256 reserveId
    ) 
        external view returns (uint256);

    function getReserve(uint256 reserveId) external view returns (DataTypes.Reserve memory);

    function getReserveId(
        address collateral,
        address asset, 
        uint256 maxTokenId,
        uint256 minTokenId
    )
        external 
        view
        returns (uint256); 

    function getReservesList() external view returns (uint256[] memory);

    function getInitializedCollaterals() external view returns (address[] memory);

    function getInitializedAssets() external view returns (address[] memory);

    function setMaxNumberOfReserves(uint256 val) external;

    function getMaxNumberOfReserves() external view returns (uint256);

    function setReserveMaxSupply(
        uint256 reserveId,
        uint256 maxSupply
    ) 
        external;

    function setReserveInterestRateAddress(
        uint256 reserveId,
        address rateAddress
    ) 
        external;

    function setReserveConfiguration(
        uint256 reserveId,
        uint256 configuration
    ) 
        external;

    function setReserveCreatorAddress(uint256 reserveId, address creator) external;

    function setReserveCreatorPercentage(uint256 reserveId, uint256 percentage) external;

    function getBorrowHealthFactor(uint256 borrowId) external view returns (uint256, uint256, uint256);
}
```

{% endtab %}

{% tab title="IAddressProvider.sol" %}

```solidity
// SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.16;

/**
 * @title AddressProvider contract
 * @dev Main registry of addresses part of or connected to the protocol, including permissioned roles
 * - Acting also as factory of proxies and admin of those, so with right to change its implementations
 * - Owned by the FluidNFT Governance
 * @author FluidNFT
 **/
interface IAddressProvider {
    event MarketIdSet(string newMarketId);
    event AddressSet(bytes32 id, address indexed newAddress, bool hasProxy);
    event ExecutionDelegateUpdated(address indexed newAddress);
    event ExecutionManagerUpdated(address indexed newAddress);
    event LendingUpdated(address indexed newAddress);
    event PromissoryNoteUpdated(address indexed newAddress);
    event PromissoryNoteBundleUpdated(address indexed newAddress);
    event ObligationReceiptUpdated(address indexed newAddress);
    event ObligationReceiptBundleUpdated(address indexed newAddress);
    event LendingPoolUpdated(address indexed newAddress);
    event ConfiguratorUpdated(address indexed newAddress);
    event CollateralManagerUpdated(address indexed newAddress);
    event PeerAdminUpdated(address indexed newAddress);
    event PoolAdminUpdated(address indexed newAddress);
    event EmergencyAdminUpdated(address indexed newAddress);
    event PriceConsumerUpdated(address indexed newAddress);
    event FluidTokenUpdated(address indexed newAddress);
    event PoolIncentivesControllerUpdated(address indexed newAddress);
    event PeerIncentivesControllerUpdated(address indexed newAddress);
    event ReferralManagerUpdated(address indexed newAddress);
    event TreasuryUpdated(address indexed newAddress);
    event DelegationRegistryUpdated(address indexed newAddress);
    event ProxyCreated(bytes32 id, address indexed newAddress);
    event FTokenImplUpdated(address indexed newAddress);
    event DebtTokenImplUpdated(address indexed newAddress);
    event NFTPriceOracleUpdated(address indexed newAddress);
    event LendingRateManagerUpdated(address indexed newAddress);
    event WETHUpdated(address indexed newAddress);
    event WETHGatewayUpdated(address indexed newAddress);

    function getMarketId() external view returns (string memory);

    function setMarketId(string calldata marketId) external;

    function getAddress(bytes32 id) external view returns (address);

    function setAddress(bytes32 id, address newAddress) external;

    function setAddressAsProxy(
        bytes32 id,
        address impl
    ) external;

    function getExecutionDelegate() external view returns (address);

    function setExecutionDelegate(address executionDelegate) external;

    function getExecutionManager() external view returns (address);

    function setExecutionManager(address executionManager) external;

    function getLending() external view returns (address);

    function setLending(address lending) external;

    function getPromissoryNote() external view returns (address);

    function setPromissoryNote(address promissoryNote) external;

    function getPromissoryNoteBundle() external view returns (address);

    function setPromissoryNoteBundle(address promissoryNote) external;

    function getObligationReceipt() external view returns (address);

    function setObligationReceipt(address obligationReceipt) external;

    function getObligationReceiptBundle() external view returns (address);

    function setObligationReceiptBundle(address obligationReceipt) external;

    function getLendingPool() external view returns (address);

    function setLendingPool(address pool) external;

    function getConfigurator() external view returns (address);

    function setConfigurator(address configurator) external;

    function setConfiguratorImpl(address configurator) external;

    function getCollateralManager() external view returns (address);

    function setCollateralManager(address collateralManager) external;

    function getPeerAdmin() external view returns (address);

    function setPeerAdmin(address admin) external;

    function getPoolAdmin() external view returns (address);

    function setPoolAdmin(address admin) external;

    function getEmergencyAdmin() external view returns (address);

    function setEmergencyAdmin(address admin) external;

    function getNFTPriceOracle() external view returns (address);

    function setNFTPriceOracle(address nftPriceOracle) external;

    function getLendingRateManager() external view returns (address);

    function setLendingRateManager(address lendingRateManager) external;

    function getPriceConsumerV3() external view returns (address);

    function setPriceConsumerV3(address priceConsumerV3) external;

    function getFluidToken() external view returns (address);

    function setFluidToken(address fluidToken) external;

    function getPoolIncentivesController() external view returns (address);

    function setPoolIncentivesController(address controller) external;

    function getPeerIncentivesController() external view returns (address);

    function setPeerIncentivesController(address controller) external;

    function getReferralManager() external view returns (address);

    function setReferralManager(address referralManager) external;

    function getTreasury() external view returns (address);

    function setTreasury(address treasury) external;

    function getDelegationRegistry() external view returns (address);

    function setDelegationRegistry(address delegationRegistry) external;

    function getFTokenImpl() external view returns (address);

    function setFTokenImpl(address fTokenImpl) external;

    function getDebtTokenImpl() external view returns (address);

    function setDebtTokenImpl(address debtTokenImpl) external;

    function getWETH() external view returns (address);

    function setWETH(address weth) external;

    function getWETHGateway() external view returns (address);

    function setWETHGateway(address weth) external;
}
```

{% endtab %}

{% tab title="ConfigTypes.sol" %}

```solidity
// SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.16;

library ConfigTypes {
    struct InitReserveInput {
        //collateral params
        address underlyingCollateral;
        string underlyingCollateralName;
        string underlyingCollateralSymbol;
        uint256 underlyingMaxTokenId;
        uint256 underlyingMinTokenId;
        //asset params
        address underlyingAsset;
        string underlyingAssetName;
        string underlyingAssetSymbol;
        uint8 underlyingAssetDecimals;
        //fToken params
        address fTokenImpl;
        string fTokenName;
        string fTokenSymbol;
        //stable debtToken params
        address stableDebtTokenImpl;
        string stableDebtTokenName;
        string stableDebtTokenSymbol;
        //variable debtToken params
        address variableDebtTokenImpl;
        string variableDebtTokenName;
        string variableDebtTokenSymbol;
        //risk params
        address interestRateStrategy;
        uint256 baseLTV;
        //account params
        address treasury;
        address creator;
        //fee params
        uint256 creatorPercentage;
        //auction params
        uint256 auctionCallerPercentage;
        uint256 auctionCreatorPercentage;
        //oracle params
        string assetPriceFeed;
    }

    struct ConfigReserveInput {
        //reserve params
        uint256 reserveId;
        uint256 reserveFactor;
        //collateral params
        uint256 ltv;
        //asset params
        uint256 decimals;
        //default params
        uint256 gracePeriod;
        uint256 liquidationBonus;
        uint256 liquidationThreshold;
        //auction params
        uint256 auctionDuration;
        uint256 auctionPriceMultiple;
        //conditional params
        bool borrowingEnabled;
    }

    struct InitNFTPriceGroupDataInput {
        address[15] nfts;
        uint256[15] reserveIds; 
        uint256[15] traitIds; 
        uint256[15] basePrices;
    }

    struct BasePriceInput {
        uint256 groupId;
        address[15] nfts;
        uint256[15] traitIds;
        uint256[15] basePrices;
    }

    struct DeltaInput {
        uint256 groupId;
        uint256[15] nfts;
        uint256[15] currentPrices;
    }

    struct UpdateFTokenInput {
        address collateral;
        address asset;
        address implementation;
        uint256 reserveId;
        bytes encodedCallData;
    }

    struct UpdateDebtTokenInput {
        address collateral;
        address asset;
        address implementation;
        uint256 reserveId;
        bytes encodedCallData;
    }
}
```

{% endtab %}

{% tab title="DataTypes.sol" %}

```solidity
// SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.16;

library DataTypes {

    /// -----------------------------------------------------------------------
    /// Exec
    /// -----------------------------------------------------------------------
    
    struct ExecItemParams {
        address target;
        bytes payload;
    }

    struct ExecBatchItemParams {
        address[] targets;
        bytes[] payloads;
        bool[] allowErrors;
    }

    /// -----------------------------------------------------------------------
    /// P2Pool
    /// -----------------------------------------------------------------------

    enum BorrowStatus { 
        None, // Default zero
        Active, // Open
        Repaid, // Closed, paid by borrower
        Auction, // In Auction
        Liquidated // Closed, paid by liquidator
    }

    enum PriceGroupStatus {
        None, // Default zero
        Active, // Able to set / get prices
        Paused, // Not able to perform any operation
        Protected // Only able to get prices
    }
    
    struct Reserve {
        ReserveConfigurationMap configuration;
        address collateral;
        address asset;
        address fTokenAddress;
        address stableDebtTokenAddress;
        address variableDebtTokenAddress;
        address interestRateAddress;
        string assetPriceFeed;
        uint256 id;
        uint256 maxTokenSupply;
        uint256 maxTokenId;
        uint256 minTokenId;
        uint128 liquidityIndex;
        uint128 variableBorrowIndex;
        uint128 currentLiquidityRate;
        uint128 currentVariableBorrowRate;
        uint40 lastUpdateTimestamp;
    }

    struct ReserveData {
        address collateral;
        address asset;
        uint256 maxTokenId;
        uint256 minTokenId;
    }

    struct InitReserveData {
        uint256 reserveId;
        address collateral;
        address asset;
        uint256 maxTokenId;
        uint256 minTokenId;
        address fTokenAddress;
        address stableDebtTokenAddress;
        address variableDebtTokenAddress;
        address interestRateAddress;
        string assetPriceFeed;
    }

    struct ReserveConfigurationMap {
        //bit 0-15: LTV
        //bit 16-31: Liq. threshold
        //bit 32-47: Liq. bonus
        //bit 48-55: Decimals
        //bit 56: Reserve is active
        //bit 57: reserve is frozen
        //bit 58: borrowing is enabled
        //bit 59: variable rate borrowing enabled
        //bit 60-63: reserved
        //bit 64-79: reserve factor
        //bit 80-95: grace period
        //bit 96-111: auction duration
        //bit 112-127: auction start price multiple
        uint256 data;
    }

    struct NFTPriceGroup {
        NFTPriceGroupConfigurationMap configuration;
        PriceGroupStatus status;
        address[15] nfts;
        uint256[15] reserveIds; 
        uint256[15] traitIds; 
        uint256[15] basePrices;
        uint256 id;
    } 

    struct NFTPriceGroupConfigurationMap {
        //bit 0-15: DELTA_01
        //bit 16-31: DELTA_02
        //bit 32-47: DELTA_03
        //bit 48-63: DELTA_04
        //bit 64-79: DELTA_05
        //bit 80-95: DELTA_06
        //bit 96-111: DELTA_07
        //bit 112-127: DELTA_08
        //bit 128-143: DELTA_09
        //bit 144-159: DELTA_10
        //bit 160-175: DELTA_11
        //bit 176-191: DELTA_12
        //bit 192-207: DELTA_13
        //bit 208-223: DELTA_14
        //bit 224-239: DELTA_15
        //bit 240: SIGN_01
        //bit 241: SIGN_02
        //bit 242: SIGN_03
        //bit 243: SIGN_04
        //bit 244: SIGN_05
        //bit 245: SIGN_06
        //bit 246: SIGN_07
        //bit 247: SIGN_08
        //bit 248: SIGN_09
        //bit 249: SIGN_10
        //bit 250: SIGN_11
        //bit 251: SIGN_12
        //bit 252: SIGN_13
        //bit 253: SIGN_14
        //bit 254: SIGN_15
        uint256 data;
    }

    struct Auction {
        address caller;
        uint256 startPrice;
        uint256 endPrice;
        uint256 timestamp;
    }

    struct Borrow {
        BorrowStatus status;
        Collateral collateral;
        Auction auction;
        address borrower;
        address erc20Token;
        uint256 borrowAmount; 
        uint256 scaledAmount;
        uint256 timestamp;
        uint256 duration;
        uint256 reserveId;
        uint256 tokenizedId;
    }

    struct ExecuteDepositParams {
        address initiator;
        uint256 amount;
        uint256 reserveId;
        address onBehalfOf;
        uint16 referralCode;
    }

    struct ExecuteBatchDepositParams {
        address initiator;
        uint256[] amounts;
        uint256[] reserveIds;
        address[] onBehalfOfs;
        uint16[] referralCodes;
    }

    struct ExecuteWithdrawParams {
        address initiator;
        uint256 amount;
        uint256 reserveId;
        address to;
    }

    struct ExecuteBatchWithdrawParams {
        address initiator;
        uint256[] amounts;
        uint256[] reserveIds;
        address[] tos;
    }

    struct ExecuteBorrowParams {
        address initiator;
        uint256 amount;
        uint256 tokenId;
        uint256 tokenValue;
        uint256 reserveId;
        uint256 duration;
        address onBehalfOf;
        uint16 referralCode;
    }

    struct ExecuteBatchBorrowParams {
        address initiator;
        uint256[] amounts;
        uint256[] tokenIds;
        uint256[] tokenValues;
        uint256[] reserveIds;
        uint256 duration;
        address onBehalfOf;
        uint16 referralCode;
    }

    struct ExecuteRepayParams {
        address initiator;
        uint256 borrowId;
        uint256 amount;
    }

    struct ExecuteBatchRepayParams {
        address initiator;
        uint256[] borrowIds;
        uint256[] amounts;
    }

    struct ExecuteRefinanceParams {
        address initiator;
        uint256 borrowId;
        uint256 amount;
        uint256 duration;
    }

    struct ExecuteBatchRefinanceParams {
        address initiator;
        uint256[] borrowIds;
        uint256[] amounts;
        uint256[] durations;
    }

    struct ExecuteAuctionParams {
        address initiator;
        uint256 borrowId;
        address onBehalfOf;
    }

    struct ExecuteBatchAuctionParams {
        address initiator;
        uint256[] borrowIds;
        address[] onBehalfOfs;
    }

    struct ExecuteBidParams {
        address initiator;
        address asset;
        uint256 amount;
        uint256 borrowId;
        address onBehalfOf;
    }

    struct ExecuteBatchBidParams {
        address initiator;
        address[] assets;
        uint256[] amounts;
        uint256[] borrowIds;
        address[] onBehalfOfs;
    }

    /// -----------------------------------------------------------------------
    /// Tokenized 
    /// -----------------------------------------------------------------------

    struct TokenizedLoan {
        address collateral;
        uint256 tokenId;
        uint256 id;
    }

    /// -----------------------------------------------------------------------
    /// P2Peer
    /// -----------------------------------------------------------------------

    enum LoanStatus {
        None, // Default zero
        Escrow, // Open
        Repaid, // Closed, lender received repayment 
        Refinanced, // Closed, lender received repayment 
        Foreclosed // Closed, lender received collateral
    }

    enum Side { Offer,  Listing }

    enum SignatureVersion { Single, Bulk }

    enum CollateralType { ERC721, ERC1155 } //TODO

    enum LoanType {
        Loan,
        Trait,
        Collection,
        Bundle,
        Renegotiation,
        Refinancing
    }

    struct Terms {
        LoanType loanType;
        /* Order collaterlTypes - empty item if not isBundle. */
        CollateralType[] collateralTypes;
        CollateralType collateralType;
        /* Order collaterals & tokenIds - empty if not isBundle. */
        address[] collaterals;
        uint256[] tokenIds;
        /* Order values - empty item if not ERC1155. */
        uint256[] values;
        /* Order collateral & tokenId - address(0) if isBundle. */
        address collateral;
        uint256 tokenId;
        /* Order value - empty item if not ERC1155. */
        uint256 value;
        address asset;
        uint256 amount;
        /* Order maximumRepayment - used for both fixed price and pro-rata loans. */
        uint256 maximumRepayment;
        /* Order minimumRepayment - used for pro-rata loans, 0 if none */
        uint256 minimumRepayment;
        /* Order interestRateInBasisPoints - used for pro-rata loans. */
        uint256 interestRateInBasisPoints; 
        uint256 duration;
        /* Loan isProRata - used enable pro-rata loan repayments. */
        bool isProRata;
        bool isBundle;
        /* Order loanId - 0 if creating a new loan. */
        uint256 loanId;
        /* Order fee - paid on renegotiation. */
        uint256 fee;
    }

    struct Order {
        address user;
        /* Referrer - for new loans & refinancing (borrower-side). */
        address referrer;
        Side side;
        Terms terms;
        /* Order counterparty - address(0) for open order. */
        address counterparty;
        bool isInstantExecution; 
        /* Order loanRepayment - for refinancing. */
        uint256 loanRepayment;
        uint256 listingTime;
        uint256 expirationTime;
        uint256 salt;
        /* Order message - for renegotiations. */
        string message;
        bytes extraParams;
        /* Borrow Id - for p2pool orders. */
        uint256 borrowId;
        /* Reserve Id - for fToken orders. */
        uint256 reserveId;
    }

    struct Input {
        Order order;
        uint8 v;
        bytes32 r;
        bytes32 s;
        bytes extraSignature;
        SignatureVersion signatureVersion;
        uint256 blockNumber;
    }

    struct Execution {
        Input offer;
        Input listing;
    }

    struct Collateral {
        /* Loan collateralType - ERC721 or ERC1155. */
        CollateralType collateralType;
        address collateral;
        uint256 tokenId;
        /* Loan value - collateral token amount (ERC1155, only). */
        uint256 value;
    }

    struct Collaterals {
        /* Loan collateralType - ERC721 or ERC1155. */
        CollateralType[] collateralTypes;
        address[] collaterals;
        uint256[] tokenIds;
        /* Loan value - collateral token amount (ERC1155, only). */
        uint256[] values;
    }

    struct Principal {
        address asset;
        uint256 amount;
    }

    struct Interest {
        /* Loan:Interest rate - in basis points (1/100th of a percent), used in pro-rata loans. */
        uint256 rate;
        /* Loan.Interest isProRata - to enable pro-rata loan repayments. */
        bool isProRata;
    }

    struct Repayment {
        /* Loan Repayment.maximum - used in both fixed price & pro-rata loans. */
        uint256 maximum;
        /* Loan Repayment.minimum - (optional) used in pro-rata loans. */
        uint256 minimum;
    }

    struct Loan {
        LoanStatus status;
        Collateral collateral;
        Principal principal;
        Interest interest;
        Repayment repayment;
        address borrower;
        address lender;
        address referrer;
        uint256 timestamp;
        uint256 duration;
        /* Loan tokenizedId - tokenId of promissoryNote and obligationReceipt. */
        uint256 tokenizedId;
    }

    struct LoanBundle {
        LoanStatus status;
        Collaterals collaterals;
        Principal principal;
        Interest interest;
        Repayment repayment;
        address borrower;
        address lender;
        address referrer;
        uint256 timestamp;
        uint256 duration;
        /* Loan tokenizedId - tokenId of promissoryNote and obligationReceipt. */
        uint256 tokenizedId;
    } 

    struct ExecuteNewLoanParams {
        DataTypes.Terms terms;
        address borrower;
        address lender;
        address referrer;
        /* Borrow Id - for p2pool Orders */
        uint256 borrowId;
        /* Reserve Id - for fToken Orders */
        uint256 reserveId;
    }

    struct ExecuteRepayLoanParams {
        uint256 loanId;
        uint256 lendingFactor;
        /* Reserve Id - for fToken repayment */
        uint256 reserveId;
    }

    struct ExecuteForecloseLoanParams {
        uint256 loanId;
    }

    struct ExecuteRenegotiateLoanParams {
        DataTypes.Terms terms;
        address borrower;
        address lender;
        /* Reserve Ids - for fToken Orders */
        uint256 borrowerReserveId;
        uint256 lenderReserveId;
    }

    struct ExecuteRefinanceLoanParams {
        DataTypes.Terms terms;
        address borrower;
        address lender;
        address referrer;
        uint256 loanRepayment;
        uint256 lendingFactor;
        /* Reserve Ids - for fToken Orders */
        uint256 borrowerReserveId;
        uint256 lenderReserveId;
    }
}
```

{% endtab %}
{% endtabs %}


# Address Provider

Addresses register of the protocol for a particular market. This contract is immutable and the address will never change. Whenever a `LendingPool` contract is needed, we recommended you fetch the correct address from the `AddressProvider` smart contract.

## Methods <a href="#functionality" id="functionality"></a>

### getMarketId() <a href="#getmarketid" id="getmarketid"></a>

**`function getMarketId()`**

**Return values**

| Type   | Description                           |
| ------ | ------------------------------------- |
| string | A string representation of the market |

### getLendingPool() <a href="#getlendingpool" id="getlendingpool"></a>

**`function getLendingPool()`**

**Return values**

| Type    | Description                                |
| ------- | ------------------------------------------ |
| address | The address of the associated LendingPool​ |

### getConfigurator() <a href="#getlendingpoolconfigurator" id="getlendingpoolconfigurator"></a>

**`function getConfigurator()`**

The `Configurator` is used for configuration methods for each market, e.g.initialising a reserve or updating fTokens.

**Return values**

| Type    | Description                                  |
| ------- | -------------------------------------------- |
| address | The address of the associated `Configurator` |

### getCollateralManager() <a href="#getlendingpoolcollateralmanager" id="getlendingpoolcollateralmanager"></a>

**`function getCollateralManager()`**

The `CollateralManager` is used for management of collateral in the protocol, the main one being for liquidation auctions. The contract should never be called directly, only via the `LendingPool`.

**Return values**

| Type    | Description                                       |
| ------- | ------------------------------------------------- |
| address | The address of the associated `CollateralManager` |

### getExecutionDelegate() <a href="#getpooladmin" id="getpooladmin"></a>

**`function getExecutionDelegate()`**

The `ExecutionDelegate` is used for managing token transfers across the protocol.

**Return values**

| Type    | Description                                       |
| ------- | ------------------------------------------------- |
| address | The address of the associated `ExecutionDelegate` |

### getExecutionManager() <a href="#getpooladmin" id="getpooladmin"></a>

**`function getExecutionManager()`**

The `ExecutionManager` can be used to optimise calls to the lending pool via `multiCall`.

**Return values**

| Type    | Description                                      |
| ------- | ------------------------------------------------ |
| address | The address of the associated `ExecutionManager` |

### getObligationReceipt() <a href="#getpooladmin" id="getpooladmin"></a>

**`function getObligationReceipt()`**

The `ObligationReceipt` is used to enable the transfer and sale of NFTs held as collateral, as well as the transfer of rights delegation.

**Return values**

| Type    | Description                                       |
| ------- | ------------------------------------------------- |
| address | The address of the associated `ObligationReceipt` |

### getTreasury() <a href="#getpooladmin" id="getpooladmin"></a>

**`function getTreasury()`**

**Return values**

| Type    | Description                            |
| ------- | -------------------------------------- |
| address | The address of the protocol `treasury` |

### getPoolAdmin() <a href="#getpooladmin" id="getpooladmin"></a>

**`function getPoolAdmin()`**

**Return values**

| Type    | Description                              |
| ------- | ---------------------------------------- |
| address | The address of the market / pool's admin |

### getEmergencyAdmin() <a href="#getpoolemergencyadmin" id="getpoolemergencyadmin"></a>

**`function getEmergencyAdmin()`**

**Return values**

| Type    | Description                                        |
| ------- | -------------------------------------------------- |
| address | The address of the market / pool's emergency admin |

### getNFTPriceOralce() <a href="#getpooladmin" id="getpooladmin"></a>

**`function getNFTPriceOracle()`**

The `NFTPriceOracle` is to fetch NFT prices at the collection, trait and token level.

**Return values**

| Type    | Description                         |
| ------- | ----------------------------------- |
| address | The address of the `NFTPriceOracle` |

### getPriceConsumerV3() <a href="#getpriceoracle" id="getpriceoracle"></a>

**`function getPriceConsumerV3()`**

The `PriceConsumerV3` is used to fetch asset prices.

**Return values**

| Type    | Description                                 |
| ------- | ------------------------------------------- |
| address | The address of the Chainlink price consumer |

### getLendingRateManager() <a href="#getlendingrateoracle" id="getlendingrateoracle"></a>

**`function getLendingRateOracle()`**

The `LendingRateManager` is used to fetch borrow interest rates and LTVs.

**Return values**

| Type    | Description                             |
| ------- | --------------------------------------- |
| address | The address of the `LendingRateManager` |

### getDelegationRegistry() <a href="#getpooladmin" id="getpooladmin"></a>

**`function getDelegationRegistry()`**

The `DelegationRegistry` is used to enable the persistence and transferability of NFT rights delegation while an NFT is held as collateral, e.g. to claim airdrops or access token-gated events.

**Return values**

| Type    | Description                                        |
| ------- | -------------------------------------------------- |
| address | The address of the associated `DelegationRegistry` |

### getWETH() <a href="#getpooladmin" id="getpooladmin"></a>

**`function getWETH()`**

The `WETH` contract is used to wrap ETH for WETH.

**Return values**

| Type    | Description                                   |
| ------- | --------------------------------------------- |
| address | The address of the associated `WETH contract` |

### getWETHGateWay() <a href="#getpooladmin" id="getpooladmin"></a>

**`function getWETHGateway()`**

The `WETHGateway` contract is used to enable ETH / native token operations.

**Return values**

| Type    | Description                                 |
| ------- | ------------------------------------------- |
| address | The address of the associated `WETHGateway` |

### getAddress() <a href="#getaddress" id="getaddress"></a>

**`function getAddress(bytes32 id)`**

**Return values**

| Type    | Description                                       |
| ------- | ------------------------------------------------- |
| address | The address associated with the `bytes32` id used |

### ABI <a href="#abi" id="abi"></a>

<details>

<summary>Address Provider ABI</summary>

```
{
  "abi": [
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "marketId",
          "type": "string"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "hasProxy",
          "type": "bool"
        }
      ],
      "name": "AddressSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "newAddress",
          "type": "address"
        }
      ],
      "name": "CollateralManagerUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "newAddress",
          "type": "address"
        }
      ],
      "name": "ConfiguratorUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "newAddress",
          "type": "address"
        }
      ],
      "name": "DebtTokenImplUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "newAddress",
          "type": "address"
        }
      ],
      "name": "DelegationRegistryUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "newAddress",
          "type": "address"
        }
      ],
      "name": "EmergencyAdminUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "newAddress",
          "type": "address"
        }
      ],
      "name": "ExecutionDelegateUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "newAddress",
          "type": "address"
        }
      ],
      "name": "ExecutionManagerUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "newAddress",
          "type": "address"
        }
      ],
      "name": "FTokenImplUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "newAddress",
          "type": "address"
        }
      ],
      "name": "FluidTokenUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "newAddress",
          "type": "address"
        }
      ],
      "name": "LendingPoolUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "newAddress",
          "type": "address"
        }
      ],
      "name": "LendingRateManagerUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "newAddress",
          "type": "address"
        }
      ],
      "name": "LendingUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "newMarketId",
          "type": "string"
        }
      ],
      "name": "MarketIdSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "newAddress",
          "type": "address"
        }
      ],
      "name": "NFTPriceOracleUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "newAddress",
          "type": "address"
        }
      ],
      "name": "ObligationReceiptBundleUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "newAddress",
          "type": "address"
        }
      ],
      "name": "ObligationReceiptUpdated",
      "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": "address",
          "name": "newAddress",
          "type": "address"
        }
      ],
      "name": "PeerAdminUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "newAddress",
          "type": "address"
        }
      ],
      "name": "PeerIncentivesControllerUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "newAddress",
          "type": "address"
        }
      ],
      "name": "PoolAdminUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "newAddress",
          "type": "address"
        }
      ],
      "name": "PoolIncentivesControllerUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "newAddress",
          "type": "address"
        }
      ],
      "name": "PriceConsumerUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "newAddress",
          "type": "address"
        }
      ],
      "name": "PromissoryNoteBundleUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "newAddress",
          "type": "address"
        }
      ],
      "name": "PromissoryNoteUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newAddress",
          "type": "address"
        }
      ],
      "name": "ProxyCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "newAddress",
          "type": "address"
        }
      ],
      "name": "ReferralManagerUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "newAddress",
          "type": "address"
        }
      ],
      "name": "TreasuryUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "newAddress",
          "type": "address"
        }
      ],
      "name": "WETHGatewayUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "newAddress",
          "type": "address"
        }
      ],
      "name": "WETHUpdated",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        }
      ],
      "name": "getAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getCollateralManager",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getConfigurator",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getDebtTokenImpl",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getDelegationRegistry",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getEmergencyAdmin",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getExecutionDelegate",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getExecutionManager",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getFTokenImpl",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getFluidToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getLending",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getLendingPool",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getLendingRateManager",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getMarketId",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getNFTPriceOracle",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getObligationReceipt",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getObligationReceiptBundle",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getPeerAdmin",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getPeerIncentivesController",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getPoolAdmin",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getPoolIncentivesController",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getPriceConsumerV3",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getPromissoryNote",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getPromissoryNoteBundle",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getReferralManager",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getTreasury",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getWETH",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getWETHGateway",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "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": "bytes32",
          "name": "id",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "newAddress",
          "type": "address"
        }
      ],
      "name": "setAddress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "implementationAddress",
          "type": "address"
        }
      ],
      "name": "setAddressAsProxy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "manager",
          "type": "address"
        }
      ],
      "name": "setCollateralManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "configurator",
          "type": "address"
        }
      ],
      "name": "setConfigurator",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "configurator",
          "type": "address"
        }
      ],
      "name": "setConfiguratorImpl",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "debtTokenImpl",
          "type": "address"
        }
      ],
      "name": "setDebtTokenImpl",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "delegationRegistry",
          "type": "address"
        }
      ],
      "name": "setDelegationRegistry",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "emergencyAdmin",
          "type": "address"
        }
      ],
      "name": "setEmergencyAdmin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "executionDelegate",
          "type": "address"
        }
      ],
      "name": "setExecutionDelegate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "executionManager",
          "type": "address"
        }
      ],
      "name": "setExecutionManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "fTokenImpl",
          "type": "address"
        }
      ],
      "name": "setFTokenImpl",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "fluidToken",
          "type": "address"
        }
      ],
      "name": "setFluidToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "lending",
          "type": "address"
        }
      ],
      "name": "setLending",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "pool",
          "type": "address"
        }
      ],
      "name": "setLendingPool",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "lendingRateManager",
          "type": "address"
        }
      ],
      "name": "setLendingRateManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "marketId",
          "type": "string"
        }
      ],
      "name": "setMarketId",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "nftPriceOracle",
          "type": "address"
        }
      ],
      "name": "setNFTPriceOracle",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "obligationReceipt",
          "type": "address"
        }
      ],
      "name": "setObligationReceipt",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "obligationReceipt",
          "type": "address"
        }
      ],
      "name": "setObligationReceiptBundle",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "admin",
          "type": "address"
        }
      ],
      "name": "setPeerAdmin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "controller",
          "type": "address"
        }
      ],
      "name": "setPeerIncentivesController",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "admin",
          "type": "address"
        }
      ],
      "name": "setPoolAdmin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "controller",
          "type": "address"
        }
      ],
      "name": "setPoolIncentivesController",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "priceConsumerV3",
          "type": "address"
        }
      ],
      "name": "setPriceConsumerV3",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "promissoryNote",
          "type": "address"
        }
      ],
      "name": "setPromissoryNote",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "promissoryNote",
          "type": "address"
        }
      ],
      "name": "setPromissoryNoteBundle",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "referralManager",
          "type": "address"
        }
      ],
      "name": "setReferralManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "treasury",
          "type": "address"
        }
      ],
      "name": "setTreasury",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "weth",
          "type": "address"
        }
      ],
      "name": "setWETH",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "wethGateway",
          "type": "address"
        }
      ],
      "name": "setWETHGateway",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x60806040523480156200001157600080fd5b50604051620034e6380380620034e6833981016040819052620000349162000128565b6200003f3362000051565b6200004a81620000a1565b5062000370565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001620000af82826200026f565b507f5e667c32fd847cf8bce48ab3400175cbf107bdc82b2dea62e3364909dfaee79981604051620000e191906200033b565b60405180910390a150565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200011f57818101518382015260200162000105565b50506000910152565b6000602082840312156200013b57600080fd5b81516001600160401b03808211156200015357600080fd5b818401915084601f8301126200016857600080fd5b8151818111156200017d576200017d620000ec565b604051601f8201601f19908116603f01168101908382118183101715620001a857620001a8620000ec565b81604052828152876020848701011115620001c257600080fd5b620001d583602083016020880162000102565b979650505050505050565b600181811c90821680620001f557607f821691505b6020821081036200021657634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200026a57600081815260208120601f850160051c81016020861015620002455750805b601f850160051c820191505b81811015620002665782815560010162000251565b5050505b505050565b81516001600160401b038111156200028b576200028b620000ec565b620002a3816200029c8454620001e0565b846200021c565b602080601f831160018114620002db5760008415620002c25750858301515b600019600386901b1c1916600185901b17855562000266565b600085815260208120601f198616915b828110156200030c57888601518255948401946001909101908401620002eb565b50858210156200032b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200035c81604085016020870162000102565b601f01601f19169190910160400192915050565b61316680620003806000396000f3fe60806040523480156200001157600080fd5b5060043610620003fc5760003560e01c806369acea5f116200021d578063a01246e31162000131578063de3c6e0411620000bb578063f0f442601162000086578063f0f4426014620007dd578063f2fde38b14620007f4578063f66e398f146200080b578063f67b1847146200082257600080fd5b8063de3c6e0414620007a8578063dfa441be14620007b2578063e4a2544d14620007bc578063ea34b96114620007c657600080fd5b8063c5f3a4c411620000fc578063c5f3a4c41462000766578063ca446dd9146200077d578063cae5f11e1462000794578063ddcaa9ea146200079e57600080fd5b8063a01246e31462000717578063ad1f9944146200072e578063aecda3781462000745578063c13e754b146200074f57600080fd5b8063842a05d411620001b357806398875827116200017e5780639887582714620006d55780639b7ae5ec14620006ec5780639f5f86ae14620006f65780639fd192b8146200070d57600080fd5b8063842a05d41462000698578063862beee114620006af5780638da5cb5b14620006b957806390313e8e14620006cb57600080fd5b806373aa9e9411620001f457806373aa9e94146200065657806374eb5a62146200066d57806377532ed914620006845780637dd83ac5146200068e57600080fd5b806369acea5f146200062b5780636c6f33a51462000635578063715018a6146200064c57600080fd5b8063283d62ad11620003155780634d82964c11620002ab5780635dcc528c11620002765780635dcc528c14620005e9578063617e0605146200060057806363ede0fc146200060a578063673adf43146200062157600080fd5b80634d82964c1462000598578063568ef47014620005af57806357d600a114620005c85780635b769f3c14620005d257600080fd5b80633b19e84a11620002ec5780633b19e84a14620005705780633fa01431146200057a57806347d2c534146200058457806347f872f1146200058e57600080fd5b8063283d62ad146200052b5780632fedd807146200054257806335da3394146200055957600080fd5b8063146b9ae311620003975780631e34764c11620003625780631e34764c14620004dc57806321da583714620004f357806321f8a721146200050a57806322e35383146200052157600080fd5b8063146b9ae314620004a7578063180fde0714620004b157806319ef926814620004c85780631a8b1fbc14620004d257600080fd5b80630c71b70111620003d85780630c71b701146200044b578063113aa8b11462000462578063135dc14714620004795780631381ba4d146200049057600080fd5b806292604714620004015780630261bf8b1462000428578063037c9be21462000432575b600080fd5b6200040b62000839565b6040516001600160a01b0390911681526020015b60405180910390f35b6200040b6200085f565b620004496200044336600462001f26565b6200087b565b005b620004496200045c36600462001f26565b6200090d565b620004496200047336600462001f26565b62000969565b620004496200048a36600462001f26565b620009f5565b62000449620004a136600462001f26565b62000a84565b6200040b62000b15565b62000449620004c236600462001f26565b62000b2f565b6200040b62000bb6565b6200040b62000be3565b62000449620004ed36600462001f26565b62000bfe565b620004496200050436600462001f26565b62000c8e565b6200040b6200051b36600462001f4b565b62000d1a565b6200040b62000d35565b620004496200053c36600462001f26565b62000d62565b620004496200055336600462001f26565b62000dec565b620004496200056a36600462001f26565b62000e7b565b6200040b62000f0a565b6200040b62000f22565b6200040b62000f44565b6200040b62000f63565b62000449620005a936600462001f26565b62000f85565b620005b962001019565b6040516200041f919062001fad565b6200040b620010b3565b62000449620005e336600462001f26565b620010d6565b62000449620005fa36600462001fc2565b6200115a565b6200040b620011b9565b620004496200061b36600462001f26565b620011dd565b6200040b6200126f565b6200040b6200128f565b620004496200064636600462001f26565b620012a6565b6200044962001343565b620004496200066736600462001f26565b6200135b565b620004496200067e36600462001f26565b620013ee565b6200040b62001479565b6200040b62001495565b62000449620006a936600462001f26565b620014be565b6200040b62001550565b6000546001600160a01b03166200040b565b6200040b62001571565b62000449620006e636600462001f26565b62001590565b6200040b6200161a565b620004496200070736600462001f26565b62001636565b6200040b620016c2565b620004496200072836600462001f26565b620016de565b620004496200073f36600462001f26565b6200176f565b6200040b62001808565b620004496200076036600462001f26565b62001822565b620004496200077736600462001f26565b620018bf565b620004496200078e36600462001fc2565b6200194f565b6200040b620019bb565b6200040b620019cf565b6200040b620019ee565b6200040b62001a0e565b6200040b62001a30565b62000449620007d736600462001f26565b62001a56565b62000449620007ee36600462001f26565b62001aec565b620004496200080536600462001f26565b62001b74565b620004496200081c36600462001f26565b62001bf7565b620004496200083336600462002007565b62001c83565b60006200085a7050524943455f434f4e53554d45525f563360781b62000d1a565b905090565b60006200085a6b13115391125391d7d413d3d360a21b62000d1a565b6200088562001c98565b71455845435554494f4e5f44454c454741544560701b600090815260026020527f20a83204e1bdb5e559f53f33519c56a69bd7bf634f98b1785b0af67f73c0025980546001600160a01b0319166001600160a01b03841690811790915560405190917f27b088f74c2a2d700056533df4dc5e9cd62f37caa25ac8934288444227638e5891a250565b6200091762001c98565b620009326b21a7a72324a3aaa920aa27a960a11b8262001cf4565b6040516001600160a01b038216907fc3236f1070213eaeaa9c639ef4afe370db8d568bff09d4a58cfb99a85e288f1e90600090a250565b6200097362001c98565b6b13115391125391d7d413d3d360a21b600090815260026020527fe5bdb40dea1fe80924bcdf7c070aa283f3cb94408a3870bba2d2fbfbae6b6df780546001600160a01b0319166001600160a01b03841690811790915560405190917fc4e6c6cdf28d0edbd8bcf071d724d33cc2e7a30be7d06443925656e9cb492aa491a250565b620009ff62001c98565b6e1111509517d513d2d15397d2535413608a1b600090815260026020527f6036d855f21afe7dfb8131b849ea29ba72dd2a065449193d6b1d9454ebcb9fa780546001600160a01b0319166001600160a01b03841690811790915560405190917f3cf954087af08d2fe2174f52171dd00643537359806f333023c728b6b443e5c091a250565b62000a8e62001c98565b7022ac22a1aaaa24a7a72fa6a0a720a3a2a960791b600090815260026020527fa33379d18b1e75d1dd776786d0e44221a6db3be8eb65c514d5c38e319119a26880546001600160a01b0319166001600160a01b03841690811790915560405190917f5eae3f21f5abac4a9e5366b214d23ec32700884bea3cfbc7502b49a9677573be91a250565b60006200085a692822a2a92fa0a226a4a760b11b62000d1a565b62000b3962001c98565b664c454e44494e4760c81b600090815260026020527f5feb06125a85fb98b540bee21269c9be1fda767db983db133357f1c77ae3dade80546001600160a01b0319166001600160a01b03841690811790915560405190917f535075f3058ab321c7ef90c69527c8440ff729fe1bf89ab1db1c0c1c3fb06a7c91a250565b60006200085a7f504f4f4c5f494e43454e54495645535f434f4e54524f4c4c455200000000000062000d1a565b60006200085a6a23262aa4a22faa27a5a2a760a91b62000d1a565b62000c0862001c98565b6f4e46545f50524943455f4f5241434c4560801b600090815260026020527fa7f3afca83ac2ad9556e7c271c326c0a0afe124cd9d3f845d316f7c11ae7b3ce80546001600160a01b0319166001600160a01b03841690811790915560405190917f9b25a87beb9b0c944472a974a70f2b8801d148aea9658ccc0b5fb8c11cf9473e91a250565b62000c9862001c98565b6b574554485f4741544557415960a01b600090815260026020527f936557deb1f2e2280930d0cea62c19c7f77ebcef5be3417aa6a4bf3196e8968b80546001600160a01b0319166001600160a01b03841690811790915560405190917f1c04adf41189ea89c3aed4d2b48952e6430bf6aed5df45f9fb5e83e5d8ea284291a250565b6000908152600260205260409020546001600160a01b031690565b60006200085a7f504545525f494e43454e54495645535f434f4e54524f4c4c455200000000000062000d1a565b62000d6c62001c98565b692827a7a62fa0a226a4a760b11b600090815260026020527f8625fbc469bac10fd11de1d783dcd446542784dbcc535ef64a1da61860fda74c80546001600160a01b0319166001600160a01b03841690811790915560405190917f8fdf777cb99daeede7a5dac227611bc42564ad910eb32dc9c0e9c9c81bed049891a250565b62000df662001c98565b6e50524f4d4953534f52595f4e4f544560881b600090815260026020527f441d10c82b253a6cf958c66adfbd60fbb8b35d06d72a10514381807fc19d3e6280546001600160a01b0319166001600160a01b03841690811790915560405190917fe0fa630ae43a2a48ce43d1b4f77f6e6a5410b1cf7caf3fcb1462b434d07f423691a250565b62000e8562001c98565b6e22a6a2a923a2a721acafa0a226a4a760891b600090815260026020527f767aa9c986e1d88108b2558f00fbd21b689a0397581446e2e868cd70421026cc80546001600160a01b0319166001600160a01b03841690811790915560405190917fe19673fc861bfeb894cf2d6b7662505497ef31c0f489b742db24ee331082691691a250565b60006200085a67545245415355525960c01b62000d1a565b60006200085a7113d0931251d0551253d397d49150d152541560721b62000d1a565b60006200085a6e1111509517d513d2d15397d2535413608a1b62000d1a565b60006200085a71455845435554494f4e5f44454c454741544560701b62000d1a565b62000f8f62001c98565b732622a72224a723afa920aa22afa6a0a720a3a2a960611b600090815260026020527f647865363de3647f266c90358eeae238843f9f3e0dd6270fea5aae19b16ebe6b80546001600160a01b0319166001600160a01b03841690811790915560405190917ff4080c1b3e5e445a25830f29277e0839af214d30054cd9d7cf05fd5f64653e6c91a250565b6060600180546200102a90620020c2565b80601f01602080910402602001604051908101604052809291908181526020018280546200105890620020c2565b8015620010a95780601f106200107d57610100808354040283529160200191620010a9565b820191906000526020600020905b8154815290600101906020018083116200108b57829003601f168201915b5050505050905090565b60006200085a7244454c45474154494f4e5f524547495354525960681b62000d1a565b620010e062001c98565b630ae8aa8960e31b600090815260026020527f9d079330cab48a13979924dfd7e87d65711257c575e853d3b075acf5fc8707c780546001600160a01b0319166001600160a01b03841690811790915560405190917f5f85e7e522385144040f94bcb1eeaeb07da5e11d6384c124c09f53986d0ed8bc91a250565b6200116462001c98565b62001170828262001cf4565b60408051838152600160208201526001600160a01b038316917ff2689d5d5cd0c639e137642cae5d40afced201a1a0327e7ac9358461dc9fff3191015b60405180910390a25050565b60006200085a732622a72224a723afa920aa22afa6a0a720a3a2a960611b62000d1a565b620011e762001c98565b7113d0931251d0551253d397d49150d152541560721b600090815260026020527f45ce244d16288f104b86e763e4270ce7b1fea9f31d2bd62b759d6dd2aa9cf00180546001600160a01b0319166001600160a01b03841690811790915560405190917f4630fffeacf5795620d8ce87474e0777773b2554a9f9b63ffd2efa16438c7c2591a250565b60006200085a6f4e46545f50524943455f4f5241434c4560801b62000d1a565b60006200085a664c454e44494e4760c81b62000d1a565b620012b062001c98565b7f504f4f4c5f494e43454e54495645535f434f4e54524f4c4c4552000000000000600090815260026020527f681bd2c3eabba7ef1f50d33af51f68b9f0cc238375aa1fdd54416dad5e3c5e0480546001600160a01b0319166001600160a01b03841690811790915560405190917f9d0aa5b8e4a2abcbfa162b696f9b38f7814029081df049c5f3b0339413636f5b91a250565b6200134d62001c98565b62001359600062001e60565b565b6200136562001c98565b7244454c45474154494f4e5f524547495354525960681b600090815260026020527fc3ab2dc989fcce615b917de19205c7c4905523d3b4cab155938e3f9cce9432ec80546001600160a01b0319166001600160a01b03841690811790915560405190917f836360d1b094a7de3c3eab3d1185f3a5939467c23d4a12709dbdbf8c8d7e2f3b91a250565b620013f862001c98565b6a23262aa4a22faa27a5a2a760a91b600090815260026020527f461c7a93a11c3461073c15abe808ff376806912495f0a37c68839a7ae672217480546001600160a01b0319166001600160a01b03841690811790915560405190917f0945294ba66186875367ce57fc808f1e792363363d0bc22ac2b939be433caa4591a250565b60006200085a6b574554485f4741544557415960a01b62000d1a565b60006200085a784f424c49474154494f4e5f524543454950545f42554e444c4560381b62000d1a565b620014c862001c98565b7121a7a62620aa22a920a62fa6a0a720a3a2a960711b600090815260026020527f65e3f3080e9127c1765503a54b8dbb495249e66169f096dfc87ee63bed17e22c80546001600160a01b0319166001600160a01b03841690811790915560405190917f507e88d0e3541203c8e7dba038a3e807ac9121f0872ed9ed895cd7f3358334eb91a250565b60006200085a7022ac22a1aaaa24a7a72fa6a0a720a3a2a960791b62000d1a565b60006200085a6e50524f4d4953534f52595f4e4f544560881b62000d1a565b6200159a62001c98565b692822a2a92fa0a226a4a760b11b600090815260026020527f761fec31aef551bbe2a4dbed4a5afc93837edb1f6ece59e999f2405cd37bfe2080546001600160a01b0319166001600160a01b03841690811790915560405190917f940c07f3aef7002b63f184f53785de5f70c9ea2a604a398c85a53f86a40831f991a250565b60006200085a6b21a7a72324a3aaa920aa27a960a11b62000d1a565b6200164062001c98565b6b21a7a72324a3aaa920aa27a960a11b600090815260026020527f3fa205ee9910fcb2a7ef96f64c2fc6dd4511448c7127832ef9ce8e435357004280546001600160a01b0319166001600160a01b03841690811790915560405190917fc3236f1070213eaeaa9c639ef4afe370db8d568bff09d4a58cfb99a85e288f1e91a250565b60006200085a6b1197d513d2d15397d253541360a21b62000d1a565b620016e862001c98565b7050524943455f434f4e53554d45525f563360781b600090815260026020527ff2c2dabbccecadca3696e7cc70a368d413205a30f0fed44bc44c4473f192f15080546001600160a01b0319166001600160a01b03841690811790915560405190917fae7da98cf481089371a92501a2fb4ae6214e6601161b9e5fceef423e3693a27791a250565b6200177962001c98565b784f424c49474154494f4e5f524543454950545f42554e444c4560381b600090815260026020527ff283f72577744e5c4dec038fe0b0adff07e8e3f3b3c55c3b795e5665c4cc808880546001600160a01b0319166001600160a01b03841690811790915560405190917ffc803fe618ff3f9bc429edbd26465851bcf005a44ee917e9c202176a538b0db391a250565b60006200085a692827a7a62fa0a226a4a760b11b62000d1a565b6200182c62001c98565b7f504545525f494e43454e54495645535f434f4e54524f4c4c4552000000000000600090815260026020527f08f417d940f24df5fa0ac39234112114f240ae4af3330d6dc7f388a3f98bf1ea80546001600160a01b0319166001600160a01b03841690811790915560405190917f3f6849575a3e5eecf847f1c0a02e060ba837f565b4a596ce5a17e6bba7e3773991a250565b620018c962001c98565b6f2922a322a92920a62fa6a0a720a3a2a960811b600090815260026020527f85f5a61f33a30cc60152b937aae1ed8fa7fb474eec304cf8cc5c3f438f8ccf1d80546001600160a01b0319166001600160a01b03841690811790915560405190917f739851f3389798a82c255c8e3f652456e404fd26f5052589eb31fe53d0a8d44891a250565b6200195962001c98565b600082815260026020908152604080832080546001600160a01b0319166001600160a01b0386169081179091558151868152928301939093527ff2689d5d5cd0c639e137642cae5d40afced201a1a0327e7ac9358461dc9fff319101620011ad565b60006200085a630ae8aa8960e31b62000d1a565b60006200085a6e22a6a2a923a2a721acafa0a226a4a760891b62000d1a565b60006200085a6f2922a322a92920a62fa6a0a720a3a2a960811b62000d1a565b60006200085a7121a7a62620aa22a920a62fa6a0a720a3a2a960711b62000d1a565b60006200085a7550524f4d4953534f52595f4e4f54455f42554e444c4560501b62000d1a565b62001a6062001c98565b7550524f4d4953534f52595f4e4f54455f42554e444c4560501b600090815260026020527fce8eac61e1d43ca1af1837c3921fc57cd7571854338e12b63de044b236391c8e80546001600160a01b0319166001600160a01b03841690811790915560405190917fa5edba971437973a01c462c05f365032801891cff2fd61211c90e8981d887ad491a250565b62001af662001c98565b67545245415355525960c01b600090815260026020527f15646afdb5940053544b11eff1ab1b5439f2fa07023995e39a0986ce3cd8da1d80546001600160a01b0319166001600160a01b03841690811790915560405190917f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d191a250565b62001b7e62001c98565b6001600160a01b03811662001be95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b62001bf48162001e60565b50565b62001c0162001c98565b6b1197d513d2d15397d253541360a21b600090815260026020527f1a2ef1ab1c0098b15595f9534710a3d371d4bfbca7705fcc085230ad838dca2c80546001600160a01b0319166001600160a01b03841690811790915560405190917fd2ad7e284a866571e2b6e8568b596974a07cb89fa93122eeb5cb02a63e3e90ab91a250565b62001c8d62001c98565b62001bf48162001eb0565b6000546001600160a01b03163314620013595760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162001be0565b6000828152600260205260409020546001600160a01b03168062001df95760405130602482015260009060440160408051601f198184030181529181526020820180516001600160e01b031663189acdbd60e31b1790525190915060009084903090849062001d639062001efb565b62001d7193929190620020fe565b604051809103906000f08015801562001d8e573d6000803e3d6000fd5b5060008681526002602090815260409182902080546001600160a01b0319166001600160a01b038516908117909155915188815292935090917f1eb35cb4b5bbb23d152f3b4016a5a46c37a07ae930ed0956aba951e231142438910160405180910390a25050505050565b604051631b2ce7f360e11b81526001600160a01b038381166004830152829190821690633659cfe690602401600060405180830381600087803b15801562001e4057600080fd5b505af115801562001e55573d6000803e3d6000fd5b50505050505b505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600162001ebe828262002187565b507f5e667c32fd847cf8bce48ab3400175cbf107bdc82b2dea62e3364909dfaee7998160405162001ef0919062001fad565b60405180910390a150565b610edc806200225583390190565b80356001600160a01b038116811462001f2157600080fd5b919050565b60006020828403121562001f3957600080fd5b62001f448262001f09565b9392505050565b60006020828403121562001f5e57600080fd5b5035919050565b6000815180845260005b8181101562001f8d5760208185018101518683018201520162001f6f565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600062001f44602083018462001f65565b6000806040838503121562001fd657600080fd5b8235915062001fe86020840162001f09565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156200201a57600080fd5b813567ffffffffffffffff808211156200203357600080fd5b818401915084601f8301126200204857600080fd5b8135818111156200205d576200205d62001ff1565b604051601f8201601f19908116603f0116810190838211818310171562002088576200208862001ff1565b81604052828152876020848701011115620020a257600080fd5b826020860160208301376000928101602001929092525095945050505050565b600181811c90821680620020d757607f821691505b602082108103620020f857634e487b7160e01b600052602260045260246000fd5b50919050565b6001600160a01b038481168252831660208201526060604082018190526000906200212c9083018462001f65565b95945050505050565b601f82111562001e5b57600081815260208120601f850160051c810160208610156200215e5750805b601f850160051c820191505b818110156200217f578281556001016200216a565b505050505050565b815167ffffffffffffffff811115620021a457620021a462001ff1565b620021bc81620021b58454620020c2565b8462002135565b602080601f831160018114620021f45760008415620021db5750858301515b600019600386901b1c1916600185901b1785556200217f565b600085815260208120601f198616915b82811015620022255788860151825594840194600190910190840162002204565b5085821015620022445787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fe608060405260405162000edc38038062000edc83398101604081905262000026916200049d565b8282828281620000398282600062000053565b506200004790508262000090565b505050505050620005d0565b6200005e83620000eb565b6000825111806200006c5750805b156200008b576200008983836200012d60201b620002b81760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000bb6200015c565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000e88162000195565b50565b620000f6816200024a565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606062000155838360405180606001604052806027815260200162000eb560279139620002fe565b9392505050565b60006200018660008051602062000e9583398151915260001b6200037d60201b6200020a1760201c565b546001600160a01b0316919050565b6001600160a01b038116620002005760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b806200022960008051602062000e9583398151915260001b6200037d60201b6200020a1760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b62000260816200038060201b620002e41760201c565b620002c45760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001f7565b80620002297f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6200037d60201b6200020a1760201c565b6060600080856001600160a01b0316856040516200031d91906200057d565b600060405180830381855af49150503d80600081146200035a576040519150601f19603f3d011682016040523d82523d6000602084013e6200035f565b606091505b50909250905062000373868383876200038f565b9695505050505050565b90565b6001600160a01b03163b151590565b6060831562000403578251600003620003fb576001600160a01b0385163b620003fb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001f7565b50816200040f565b6200040f838362000417565b949350505050565b815115620004285781518083602001fd5b8060405162461bcd60e51b8152600401620001f791906200059b565b80516001600160a01b03811681146200045c57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620004945781810151838201526020016200047a565b50506000910152565b600080600060608486031215620004b357600080fd5b620004be8462000444565b9250620004ce6020850162000444565b60408501519092506001600160401b0380821115620004ec57600080fd5b818601915086601f8301126200050157600080fd5b81518181111562000516576200051662000461565b604051601f8201601f19908116603f0116810190838211818310171562000541576200054162000461565b816040528281528960208487010111156200055b57600080fd5b6200056e83602083016020880162000477565b80955050505050509250925092565b600082516200059181846020870162000477565b9190910192915050565b6020815260008251806020840152620005bc81604085016020870162000477565b601f01601f19169190910160400192915050565b6108b580620005e06000396000f3fe6080604052600436106100595760003560e01c80633659cfe6146100705780634f1ef286146100905780635c60da1b146100a35780638f283970146100d4578063aaf10f42146100f4578063f851a4401461010957610068565b366100685761006661011e565b005b61006661011e565b34801561007c57600080fd5b5061006661008b366004610747565b610138565b61006661009e366004610762565b610175565b3480156100af57600080fd5b506100b86101dc565b6040516001600160a01b03909116815260200160405180910390f35b3480156100e057600080fd5b506100666100ef366004610747565b61020d565b34801561010057600080fd5b506100b861022d565b34801561011557600080fd5b506100b8610297565b6101266102f3565b610136610131610383565b61038d565b565b6101406103b1565b6001600160a01b0316330361016d5761016a816040518060200160405280600081525060006103e4565b50565b61016a61011e565b61017d6103b1565b6001600160a01b031633036101d4576101cf8383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506103e4915050565b505050565b6101cf61011e565b60006101e66103b1565b6001600160a01b03163303610202576101fd610383565b905090565b61020a61011e565b90565b6102156103b1565b6001600160a01b0316330361016d5761016a8161040f565b60006102376103b1565b6001600160a01b0316336001600160a01b0316146040518060400160405280600381526020016203130360ec1b8152509061028e5760405162461bcd60e51b81526004016102859190610809565b60405180910390fd5b506101fd610463565b60006102a16103b1565b6001600160a01b03163303610202576101fd6103b1565b60606102dd83836040518060600160405280602781526020016108596027913961048b565b9392505050565b6001600160a01b03163b151590565b6102fb6103b1565b6001600160a01b031633036101365760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a401610285565b60006101fd610463565b3660008037600080366000845af43d6000803e8080156103ac573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103ed83610503565b6000825111806103fa5750805b156101cf5761040983836102b8565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104386103b1565b604080516001600160a01b03928316815291841660208301520160405180910390a161016a81610543565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6103d5565b6060600080856001600160a01b0316856040516104a8919061083c565b600060405180830381855af49150503d80600081146104e3576040519150601f19603f3d011682016040523d82523d6000602084013e6104e8565b606091505b50915091506104f9868383876105ec565b9695505050505050565b61050c8161066d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105a85760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610285565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060831561065b578251600003610654576001600160a01b0385163b6106545760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610285565b5081610665565b6106658383610701565b949350505050565b6001600160a01b0381163b6106da5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610285565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105cb565b8151156107115781518083602001fd5b8060405162461bcd60e51b81526004016102859190610809565b80356001600160a01b038116811461074257600080fd5b919050565b60006020828403121561075957600080fd5b6102dd8261072b565b60008060006040848603121561077757600080fd5b6107808461072b565b9250602084013567ffffffffffffffff8082111561079d57600080fd5b818601915086601f8301126107b157600080fd5b8135818111156107c057600080fd5b8760208285010111156107d257600080fd5b6020830194508093505050509250925092565b60005b838110156108005781810151838201526020016107e8565b50506000910152565b60208152600082518060208401526108288160408501602087016107e5565b601f01601f19169190910160400192915050565b6000825161084e8184602087016107e5565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220eaa9a4e34e6339207f9f4ee73803a16882cd2365f69bed76331cc1683744028e64736f6c63430008100033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d6de7042bd25751a8072b1fde58ce4223d86347c723b9bfe33e92e9f74861ac964736f6c63430008100033",
    "sourceMap": "670:18286:118:-:0;;;2573:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;936:32:41;719:10:65;936:18:41;:32::i;:::-;2619:22:118;2632:8;2619:12;:22::i;:::-;2573:75;670:18286;;2433:187:41;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:41;;;-1:-1:-1;;;;;;2541:17:41;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;18826:128:118:-;18891:9;:20;18903:8;18891:9;:20;:::i;:::-;;18926:21;18938:8;18926:21;;;;;;:::i;:::-;;;;;;;;18826:128;:::o;14:127:176:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:250;231:1;241:113;255:6;252:1;249:13;241:113;;;331:11;;;325:18;312:11;;;305:39;277:2;270:10;241:113;;;-1:-1:-1;;388:1:176;370:16;;363:27;146:250::o;401:897::-;481:6;534:2;522:9;513:7;509:23;505:32;502:52;;;550:1;547;540:12;502:52;577:16;;-1:-1:-1;;;;;642:14:176;;;639:34;;;669:1;666;659:12;639:34;707:6;696:9;692:22;682:32;;752:7;745:4;741:2;737:13;733:27;723:55;;774:1;771;764:12;723:55;803:2;797:9;825:2;821;818:10;815:36;;;831:18;;:::i;:::-;906:2;900:9;874:2;960:13;;-1:-1:-1;;956:22:176;;;980:2;952:31;948:40;936:53;;;1004:18;;;1024:22;;;1001:46;998:72;;;1050:18;;:::i;:::-;1090:10;1086:2;1079:22;1125:2;1117:6;1110:18;1165:7;1160:2;1155;1151;1147:11;1143:20;1140:33;1137:53;;;1186:1;1183;1176:12;1137:53;1199:68;1264:2;1259;1251:6;1247:15;1242:2;1238;1234:11;1199:68;:::i;:::-;1286:6;401:897;-1:-1:-1;;;;;;;401:897:176:o;1303:380::-;1382:1;1378:12;;;;1425;;;1446:61;;1500:4;1492:6;1488:17;1478:27;;1446:61;1553:2;1545:6;1542:14;1522:18;1519:38;1516:161;;1599:10;1594:3;1590:20;1587:1;1580:31;1634:4;1631:1;1624:15;1662:4;1659:1;1652:15;1516:161;;1303:380;;;:::o;1814:545::-;1916:2;1911:3;1908:11;1905:448;;;1952:1;1977:5;1973:2;1966:17;2022:4;2018:2;2008:19;2092:2;2080:10;2076:19;2073:1;2069:27;2063:4;2059:38;2128:4;2116:10;2113:20;2110:47;;;-1:-1:-1;2151:4:176;2110:47;2206:2;2201:3;2197:12;2194:1;2190:20;2184:4;2180:31;2170:41;;2261:82;2279:2;2272:5;2269:13;2261:82;;;2324:17;;;2305:1;2294:13;2261:82;;;2265:3;;;1905:448;1814:545;;;:::o;2535:1352::-;2655:10;;-1:-1:-1;;;;;2677:30:176;;2674:56;;;2710:18;;:::i;:::-;2739:97;2829:6;2789:38;2821:4;2815:11;2789:38;:::i;:::-;2783:4;2739:97;:::i;:::-;2891:4;;2955:2;2944:14;;2972:1;2967:663;;;;3674:1;3691:6;3688:89;;;-1:-1:-1;3743:19:176;;;3737:26;3688:89;-1:-1:-1;;2492:1:176;2488:11;;;2484:24;2480:29;2470:40;2516:1;2512:11;;;2467:57;3790:81;;2937:944;;2967:663;1761:1;1754:14;;;1798:4;1785:18;;-1:-1:-1;;3003:20:176;;;3121:236;3135:7;3132:1;3129:14;3121:236;;;3224:19;;;3218:26;3203:42;;3316:27;;;;3284:1;3272:14;;;;3151:19;;3121:236;;;3125:3;3385:6;3376:7;3373:19;3370:201;;;3446:19;;;3440:26;-1:-1:-1;;3529:1:176;3525:14;;;3541:3;3521:24;3517:37;3513:42;3498:58;3483:74;;3370:201;-1:-1:-1;;;;;3617:1:176;3601:14;;;3597:22;3584:36;;-1:-1:-1;2535:1352:176:o;3892:396::-;4041:2;4030:9;4023:21;4004:4;4073:6;4067:13;4116:6;4111:2;4100:9;4096:18;4089:34;4132:79;4204:6;4199:2;4188:9;4184:18;4179:2;4171:6;4167:15;4132:79;:::i;:::-;4272:2;4251:15;-1:-1:-1;;4247:29:176;4232:45;;;;4279:2;4228:54;;3892:396;-1:-1:-1;;3892:396:176:o;:::-;670:18286:118;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x60806040523480156200001157600080fd5b5060043610620003fc5760003560e01c806369acea5f116200021d578063a01246e31162000131578063de3c6e0411620000bb578063f0f442601162000086578063f0f4426014620007dd578063f2fde38b14620007f4578063f66e398f146200080b578063f67b1847146200082257600080fd5b8063de3c6e0414620007a8578063dfa441be14620007b2578063e4a2544d14620007bc578063ea34b96114620007c657600080fd5b8063c5f3a4c411620000fc578063c5f3a4c41462000766578063ca446dd9146200077d578063cae5f11e1462000794578063ddcaa9ea146200079e57600080fd5b8063a01246e31462000717578063ad1f9944146200072e578063aecda3781462000745578063c13e754b146200074f57600080fd5b8063842a05d411620001b357806398875827116200017e5780639887582714620006d55780639b7ae5ec14620006ec5780639f5f86ae14620006f65780639fd192b8146200070d57600080fd5b8063842a05d41462000698578063862beee114620006af5780638da5cb5b14620006b957806390313e8e14620006cb57600080fd5b806373aa9e9411620001f457806373aa9e94146200065657806374eb5a62146200066d57806377532ed914620006845780637dd83ac5146200068e57600080fd5b806369acea5f146200062b5780636c6f33a51462000635578063715018a6146200064c57600080fd5b8063283d62ad11620003155780634d82964c11620002ab5780635dcc528c11620002765780635dcc528c14620005e9578063617e0605146200060057806363ede0fc146200060a578063673adf43146200062157600080fd5b80634d82964c1462000598578063568ef47014620005af57806357d600a114620005c85780635b769f3c14620005d257600080fd5b80633b19e84a11620002ec5780633b19e84a14620005705780633fa01431146200057a57806347d2c534146200058457806347f872f1146200058e57600080fd5b8063283d62ad146200052b5780632fedd807146200054257806335da3394146200055957600080fd5b8063146b9ae311620003975780631e34764c11620003625780631e34764c14620004dc57806321da583714620004f357806321f8a721146200050a57806322e35383146200052157600080fd5b8063146b9ae314620004a7578063180fde0714620004b157806319ef926814620004c85780631a8b1fbc14620004d257600080fd5b80630c71b70111620003d85780630c71b701146200044b578063113aa8b11462000462578063135dc14714620004795780631381ba4d146200049057600080fd5b806292604714620004015780630261bf8b1462000428578063037c9be21462000432575b600080fd5b6200040b62000839565b6040516001600160a01b0390911681526020015b60405180910390f35b6200040b6200085f565b620004496200044336600462001f26565b6200087b565b005b620004496200045c36600462001f26565b6200090d565b620004496200047336600462001f26565b62000969565b620004496200048a36600462001f26565b620009f5565b62000449620004a136600462001f26565b62000a84565b6200040b62000b15565b62000449620004c236600462001f26565b62000b2f565b6200040b62000bb6565b6200040b62000be3565b62000449620004ed36600462001f26565b62000bfe565b620004496200050436600462001f26565b62000c8e565b6200040b6200051b36600462001f4b565b62000d1a565b6200040b62000d35565b620004496200053c36600462001f26565b62000d62565b620004496200055336600462001f26565b62000dec565b620004496200056a36600462001f26565b62000e7b565b6200040b62000f0a565b6200040b62000f22565b6200040b62000f44565b6200040b62000f63565b62000449620005a936600462001f26565b62000f85565b620005b962001019565b6040516200041f919062001fad565b6200040b620010b3565b62000449620005e336600462001f26565b620010d6565b62000449620005fa36600462001fc2565b6200115a565b6200040b620011b9565b620004496200061b36600462001f26565b620011dd565b6200040b6200126f565b6200040b6200128f565b620004496200064636600462001f26565b620012a6565b6200044962001343565b620004496200066736600462001f26565b6200135b565b620004496200067e36600462001f26565b620013ee565b6200040b62001479565b6200040b62001495565b62000449620006a936600462001f26565b620014be565b6200040b62001550565b6000546001600160a01b03166200040b565b6200040b62001571565b62000449620006e636600462001f26565b62001590565b6200040b6200161a565b620004496200070736600462001f26565b62001636565b6200040b620016c2565b620004496200072836600462001f26565b620016de565b620004496200073f36600462001f26565b6200176f565b6200040b62001808565b620004496200076036600462001f26565b62001822565b620004496200077736600462001f26565b620018bf565b620004496200078e36600462001fc2565b6200194f565b6200040b620019bb565b6200040b620019cf565b6200040b620019ee565b6200040b62001a0e565b6200040b62001a30565b62000449620007d736600462001f26565b62001a56565b62000449620007ee36600462001f26565b62001aec565b620004496200080536600462001f26565b62001b74565b620004496200081c36600462001f26565b62001bf7565b620004496200083336600462002007565b62001c83565b60006200085a7050524943455f434f4e53554d45525f563360781b62000d1a565b905090565b60006200085a6b13115391125391d7d413d3d360a21b62000d1a565b6200088562001c98565b71455845435554494f4e5f44454c454741544560701b600090815260026020527f20a83204e1bdb5e559f53f33519c56a69bd7bf634f98b1785b0af67f73c0025980546001600160a01b0319166001600160a01b03841690811790915560405190917f27b088f74c2a2d700056533df4dc5e9cd62f37caa25ac8934288444227638e5891a250565b6200091762001c98565b620009326b21a7a72324a3aaa920aa27a960a11b8262001cf4565b6040516001600160a01b038216907fc3236f1070213eaeaa9c639ef4afe370db8d568bff09d4a58cfb99a85e288f1e90600090a250565b6200097362001c98565b6b13115391125391d7d413d3d360a21b600090815260026020527fe5bdb40dea1fe80924bcdf7c070aa283f3cb94408a3870bba2d2fbfbae6b6df780546001600160a01b0319166001600160a01b03841690811790915560405190917fc4e6c6cdf28d0edbd8bcf071d724d33cc2e7a30be7d06443925656e9cb492aa491a250565b620009ff62001c98565b6e1111509517d513d2d15397d2535413608a1b600090815260026020527f6036d855f21afe7dfb8131b849ea29ba72dd2a065449193d6b1d9454ebcb9fa780546001600160a01b0319166001600160a01b03841690811790915560405190917f3cf954087af08d2fe2174f52171dd00643537359806f333023c728b6b443e5c091a250565b62000a8e62001c98565b7022ac22a1aaaa24a7a72fa6a0a720a3a2a960791b600090815260026020527fa33379d18b1e75d1dd776786d0e44221a6db3be8eb65c514d5c38e319119a26880546001600160a01b0319166001600160a01b03841690811790915560405190917f5eae3f21f5abac4a9e5366b214d23ec32700884bea3cfbc7502b49a9677573be91a250565b60006200085a692822a2a92fa0a226a4a760b11b62000d1a565b62000b3962001c98565b664c454e44494e4760c81b600090815260026020527f5feb06125a85fb98b540bee21269c9be1fda767db983db133357f1c77ae3dade80546001600160a01b0319166001600160a01b03841690811790915560405190917f535075f3058ab321c7ef90c69527c8440ff729fe1bf89ab1db1c0c1c3fb06a7c91a250565b60006200085a7f504f4f4c5f494e43454e54495645535f434f4e54524f4c4c455200000000000062000d1a565b60006200085a6a23262aa4a22faa27a5a2a760a91b62000d1a565b62000c0862001c98565b6f4e46545f50524943455f4f5241434c4560801b600090815260026020527fa7f3afca83ac2ad9556e7c271c326c0a0afe124cd9d3f845d316f7c11ae7b3ce80546001600160a01b0319166001600160a01b03841690811790915560405190917f9b25a87beb9b0c944472a974a70f2b8801d148aea9658ccc0b5fb8c11cf9473e91a250565b62000c9862001c98565b6b574554485f4741544557415960a01b600090815260026020527f936557deb1f2e2280930d0cea62c19c7f77ebcef5be3417aa6a4bf3196e8968b80546001600160a01b0319166001600160a01b03841690811790915560405190917f1c04adf41189ea89c3aed4d2b48952e6430bf6aed5df45f9fb5e83e5d8ea284291a250565b6000908152600260205260409020546001600160a01b031690565b60006200085a7f504545525f494e43454e54495645535f434f4e54524f4c4c455200000000000062000d1a565b62000d6c62001c98565b692827a7a62fa0a226a4a760b11b600090815260026020527f8625fbc469bac10fd11de1d783dcd446542784dbcc535ef64a1da61860fda74c80546001600160a01b0319166001600160a01b03841690811790915560405190917f8fdf777cb99daeede7a5dac227611bc42564ad910eb32dc9c0e9c9c81bed049891a250565b62000df662001c98565b6e50524f4d4953534f52595f4e4f544560881b600090815260026020527f441d10c82b253a6cf958c66adfbd60fbb8b35d06d72a10514381807fc19d3e6280546001600160a01b0319166001600160a01b03841690811790915560405190917fe0fa630ae43a2a48ce43d1b4f77f6e6a5410b1cf7caf3fcb1462b434d07f423691a250565b62000e8562001c98565b6e22a6a2a923a2a721acafa0a226a4a760891b600090815260026020527f767aa9c986e1d88108b2558f00fbd21b689a0397581446e2e868cd70421026cc80546001600160a01b0319166001600160a01b03841690811790915560405190917fe19673fc861bfeb894cf2d6b7662505497ef31c0f489b742db24ee331082691691a250565b60006200085a67545245415355525960c01b62000d1a565b60006200085a7113d0931251d0551253d397d49150d152541560721b62000d1a565b60006200085a6e1111509517d513d2d15397d2535413608a1b62000d1a565b60006200085a71455845435554494f4e5f44454c454741544560701b62000d1a565b62000f8f62001c98565b732622a72224a723afa920aa22afa6a0a720a3a2a960611b600090815260026020527f647865363de3647f266c90358eeae238843f9f3e0dd6270fea5aae19b16ebe6b80546001600160a01b0319166001600160a01b03841690811790915560405190917ff4080c1b3e5e445a25830f29277e0839af214d30054cd9d7cf05fd5f64653e6c91a250565b6060600180546200102a90620020c2565b80601f01602080910402602001604051908101604052809291908181526020018280546200105890620020c2565b8015620010a95780601f106200107d57610100808354040283529160200191620010a9565b820191906000526020600020905b8154815290600101906020018083116200108b57829003601f168201915b5050505050905090565b60006200085a7244454c45474154494f4e5f524547495354525960681b62000d1a565b620010e062001c98565b630ae8aa8960e31b600090815260026020527f9d079330cab48a13979924dfd7e87d65711257c575e853d3b075acf5fc8707c780546001600160a01b0319166001600160a01b03841690811790915560405190917f5f85e7e522385144040f94bcb1eeaeb07da5e11d6384c124c09f53986d0ed8bc91a250565b6200116462001c98565b62001170828262001cf4565b60408051838152600160208201526001600160a01b038316917ff2689d5d5cd0c639e137642cae5d40afced201a1a0327e7ac9358461dc9fff3191015b60405180910390a25050565b60006200085a732622a72224a723afa920aa22afa6a0a720a3a2a960611b62000d1a565b620011e762001c98565b7113d0931251d0551253d397d49150d152541560721b600090815260026020527f45ce244d16288f104b86e763e4270ce7b1fea9f31d2bd62b759d6dd2aa9cf00180546001600160a01b0319166001600160a01b03841690811790915560405190917f4630fffeacf5795620d8ce87474e0777773b2554a9f9b63ffd2efa16438c7c2591a250565b60006200085a6f4e46545f50524943455f4f5241434c4560801b62000d1a565b60006200085a664c454e44494e4760c81b62000d1a565b620012b062001c98565b7f504f4f4c5f494e43454e54495645535f434f4e54524f4c4c4552000000000000600090815260026020527f681bd2c3eabba7ef1f50d33af51f68b9f0cc238375aa1fdd54416dad5e3c5e0480546001600160a01b0319166001600160a01b03841690811790915560405190917f9d0aa5b8e4a2abcbfa162b696f9b38f7814029081df049c5f3b0339413636f5b91a250565b6200134d62001c98565b62001359600062001e60565b565b6200136562001c98565b7244454c45474154494f4e5f524547495354525960681b600090815260026020527fc3ab2dc989fcce615b917de19205c7c4905523d3b4cab155938e3f9cce9432ec80546001600160a01b0319166001600160a01b03841690811790915560405190917f836360d1b094a7de3c3eab3d1185f3a5939467c23d4a12709dbdbf8c8d7e2f3b91a250565b620013f862001c98565b6a23262aa4a22faa27a5a2a760a91b600090815260026020527f461c7a93a11c3461073c15abe808ff376806912495f0a37c68839a7ae672217480546001600160a01b0319166001600160a01b03841690811790915560405190917f0945294ba66186875367ce57fc808f1e792363363d0bc22ac2b939be433caa4591a250565b60006200085a6b574554485f4741544557415960a01b62000d1a565b60006200085a784f424c49474154494f4e5f524543454950545f42554e444c4560381b62000d1a565b620014c862001c98565b7121a7a62620aa22a920a62fa6a0a720a3a2a960711b600090815260026020527f65e3f3080e9127c1765503a54b8dbb495249e66169f096dfc87ee63bed17e22c80546001600160a01b0319166001600160a01b03841690811790915560405190917f507e88d0e3541203c8e7dba038a3e807ac9121f0872ed9ed895cd7f3358334eb91a250565b60006200085a7022ac22a1aaaa24a7a72fa6a0a720a3a2a960791b62000d1a565b60006200085a6e50524f4d4953534f52595f4e4f544560881b62000d1a565b6200159a62001c98565b692822a2a92fa0a226a4a760b11b600090815260026020527f761fec31aef551bbe2a4dbed4a5afc93837edb1f6ece59e999f2405cd37bfe2080546001600160a01b0319166001600160a01b03841690811790915560405190917f940c07f3aef7002b63f184f53785de5f70c9ea2a604a398c85a53f86a40831f991a250565b60006200085a6b21a7a72324a3aaa920aa27a960a11b62000d1a565b6200164062001c98565b6b21a7a72324a3aaa920aa27a960a11b600090815260026020527f3fa205ee9910fcb2a7ef96f64c2fc6dd4511448c7127832ef9ce8e435357004280546001600160a01b0319166001600160a01b03841690811790915560405190917fc3236f1070213eaeaa9c639ef4afe370db8d568bff09d4a58cfb99a85e288f1e91a250565b60006200085a6b1197d513d2d15397d253541360a21b62000d1a565b620016e862001c98565b7050524943455f434f4e53554d45525f563360781b600090815260026020527ff2c2dabbccecadca3696e7cc70a368d413205a30f0fed44bc44c4473f192f15080546001600160a01b0319166001600160a01b03841690811790915560405190917fae7da98cf481089371a92501a2fb4ae6214e6601161b9e5fceef423e3693a27791a250565b6200177962001c98565b784f424c49474154494f4e5f524543454950545f42554e444c4560381b600090815260026020527ff283f72577744e5c4dec038fe0b0adff07e8e3f3b3c55c3b795e5665c4cc808880546001600160a01b0319166001600160a01b03841690811790915560405190917ffc803fe618ff3f9bc429edbd26465851bcf005a44ee917e9c202176a538b0db391a250565b60006200085a692827a7a62fa0a226a4a760b11b62000d1a565b6200182c62001c98565b7f504545525f494e43454e54495645535f434f4e54524f4c4c4552000000000000600090815260026020527f08f417d940f24df5fa0ac39234112114f240ae4af3330d6dc7f388a3f98bf1ea80546001600160a01b0319166001600160a01b03841690811790915560405190917f3f6849575a3e5eecf847f1c0a02e060ba837f565b4a596ce5a17e6bba7e3773991a250565b620018c962001c98565b6f2922a322a92920a62fa6a0a720a3a2a960811b600090815260026020527f85f5a61f33a30cc60152b937aae1ed8fa7fb474eec304cf8cc5c3f438f8ccf1d80546001600160a01b0319166001600160a01b03841690811790915560405190917f739851f3389798a82c255c8e3f652456e404fd26f5052589eb31fe53d0a8d44891a250565b6200195962001c98565b600082815260026020908152604080832080546001600160a01b0319166001600160a01b0386169081179091558151868152928301939093527ff2689d5d5cd0c639e137642cae5d40afced201a1a0327e7ac9358461dc9fff319101620011ad565b60006200085a630ae8aa8960e31b62000d1a565b60006200085a6e22a6a2a923a2a721acafa0a226a4a760891b62000d1a565b60006200085a6f2922a322a92920a62fa6a0a720a3a2a960811b62000d1a565b60006200085a7121a7a62620aa22a920a62fa6a0a720a3a2a960711b62000d1a565b60006200085a7550524f4d4953534f52595f4e4f54455f42554e444c4560501b62000d1a565b62001a6062001c98565b7550524f4d4953534f52595f4e4f54455f42554e444c4560501b600090815260026020527fce8eac61e1d43ca1af1837c3921fc57cd7571854338e12b63de044b236391c8e80546001600160a01b0319166001600160a01b03841690811790915560405190917fa5edba971437973a01c462c05f365032801891cff2fd61211c90e8981d887ad491a250565b62001af662001c98565b67545245415355525960c01b600090815260026020527f15646afdb5940053544b11eff1ab1b5439f2fa07023995e39a0986ce3cd8da1d80546001600160a01b0319166001600160a01b03841690811790915560405190917f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d191a250565b62001b7e62001c98565b6001600160a01b03811662001be95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b62001bf48162001e60565b50565b62001c0162001c98565b6b1197d513d2d15397d253541360a21b600090815260026020527f1a2ef1ab1c0098b15595f9534710a3d371d4bfbca7705fcc085230ad838dca2c80546001600160a01b0319166001600160a01b03841690811790915560405190917fd2ad7e284a866571e2b6e8568b596974a07cb89fa93122eeb5cb02a63e3e90ab91a250565b62001c8d62001c98565b62001bf48162001eb0565b6000546001600160a01b03163314620013595760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162001be0565b6000828152600260205260409020546001600160a01b03168062001df95760405130602482015260009060440160408051601f198184030181529181526020820180516001600160e01b031663189acdbd60e31b1790525190915060009084903090849062001d639062001efb565b62001d7193929190620020fe565b604051809103906000f08015801562001d8e573d6000803e3d6000fd5b5060008681526002602090815260409182902080546001600160a01b0319166001600160a01b038516908117909155915188815292935090917f1eb35cb4b5bbb23d152f3b4016a5a46c37a07ae930ed0956aba951e231142438910160405180910390a25050505050565b604051631b2ce7f360e11b81526001600160a01b038381166004830152829190821690633659cfe690602401600060405180830381600087803b15801562001e4057600080fd5b505af115801562001e55573d6000803e3d6000fd5b50505050505b505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600162001ebe828262002187565b507f5e667c32fd847cf8bce48ab3400175cbf107bdc82b2dea62e3364909dfaee7998160405162001ef0919062001fad565b60405180910390a150565b610edc806200225583390190565b80356001600160a01b038116811462001f2157600080fd5b919050565b60006020828403121562001f3957600080fd5b62001f448262001f09565b9392505050565b60006020828403121562001f5e57600080fd5b5035919050565b6000815180845260005b8181101562001f8d5760208185018101518683018201520162001f6f565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600062001f44602083018462001f65565b6000806040838503121562001fd657600080fd5b8235915062001fe86020840162001f09565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156200201a57600080fd5b813567ffffffffffffffff808211156200203357600080fd5b818401915084601f8301126200204857600080fd5b8135818111156200205d576200205d62001ff1565b604051601f8201601f19908116603f0116810190838211818310171562002088576200208862001ff1565b81604052828152876020848701011115620020a257600080fd5b826020860160208301376000928101602001929092525095945050505050565b600181811c90821680620020d757607f821691505b602082108103620020f857634e487b7160e01b600052602260045260246000fd5b50919050565b6001600160a01b038481168252831660208201526060604082018190526000906200212c9083018462001f65565b95945050505050565b601f82111562001e5b57600081815260208120601f850160051c810160208610156200215e5750805b601f850160051c820191505b818110156200217f578281556001016200216a565b505050505050565b815167ffffffffffffffff811115620021a457620021a462001ff1565b620021bc81620021b58454620020c2565b8462002135565b602080601f831160018114620021f45760008415620021db5750858301515b600019600386901b1c1916600185901b1785556200217f565b600085815260208120601f198616915b82811015620022255788860151825594840194600190910190840162002204565b5085821015620022445787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fe608060405260405162000edc38038062000edc83398101604081905262000026916200049d565b8282828281620000398282600062000053565b506200004790508262000090565b505050505050620005d0565b6200005e83620000eb565b6000825111806200006c5750805b156200008b576200008983836200012d60201b620002b81760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000bb6200015c565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000e88162000195565b50565b620000f6816200024a565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606062000155838360405180606001604052806027815260200162000eb560279139620002fe565b9392505050565b60006200018660008051602062000e9583398151915260001b6200037d60201b6200020a1760201c565b546001600160a01b0316919050565b6001600160a01b038116620002005760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b806200022960008051602062000e9583398151915260001b6200037d60201b6200020a1760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b62000260816200038060201b620002e41760201c565b620002c45760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001f7565b80620002297f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6200037d60201b6200020a1760201c565b6060600080856001600160a01b0316856040516200031d91906200057d565b600060405180830381855af49150503d80600081146200035a576040519150601f19603f3d011682016040523d82523d6000602084013e6200035f565b606091505b50909250905062000373868383876200038f565b9695505050505050565b90565b6001600160a01b03163b151590565b6060831562000403578251600003620003fb576001600160a01b0385163b620003fb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001f7565b50816200040f565b6200040f838362000417565b949350505050565b815115620004285781518083602001fd5b8060405162461bcd60e51b8152600401620001f791906200059b565b80516001600160a01b03811681146200045c57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620004945781810151838201526020016200047a565b50506000910152565b600080600060608486031215620004b357600080fd5b620004be8462000444565b9250620004ce6020850162000444565b60408501519092506001600160401b0380821115620004ec57600080fd5b818601915086601f8301126200050157600080fd5b81518181111562000516576200051662000461565b604051601f8201601f19908116603f0116810190838211818310171562000541576200054162000461565b816040528281528960208487010111156200055b57600080fd5b6200056e83602083016020880162000477565b80955050505050509250925092565b600082516200059181846020870162000477565b9190910192915050565b6020815260008251806020840152620005bc81604085016020870162000477565b601f01601f19169190910160400192915050565b6108b580620005e06000396000f3fe6080604052600436106100595760003560e01c80633659cfe6146100705780634f1ef286146100905780635c60da1b146100a35780638f283970146100d4578063aaf10f42146100f4578063f851a4401461010957610068565b366100685761006661011e565b005b61006661011e565b34801561007c57600080fd5b5061006661008b366004610747565b610138565b61006661009e366004610762565b610175565b3480156100af57600080fd5b506100b86101dc565b6040516001600160a01b03909116815260200160405180910390f35b3480156100e057600080fd5b506100666100ef366004610747565b61020d565b34801561010057600080fd5b506100b861022d565b34801561011557600080fd5b506100b8610297565b6101266102f3565b610136610131610383565b61038d565b565b6101406103b1565b6001600160a01b0316330361016d5761016a816040518060200160405280600081525060006103e4565b50565b61016a61011e565b61017d6103b1565b6001600160a01b031633036101d4576101cf8383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506103e4915050565b505050565b6101cf61011e565b60006101e66103b1565b6001600160a01b03163303610202576101fd610383565b905090565b61020a61011e565b90565b6102156103b1565b6001600160a01b0316330361016d5761016a8161040f565b60006102376103b1565b6001600160a01b0316336001600160a01b0316146040518060400160405280600381526020016203130360ec1b8152509061028e5760405162461bcd60e51b81526004016102859190610809565b60405180910390fd5b506101fd610463565b60006102a16103b1565b6001600160a01b03163303610202576101fd6103b1565b60606102dd83836040518060600160405280602781526020016108596027913961048b565b9392505050565b6001600160a01b03163b151590565b6102fb6103b1565b6001600160a01b031633036101365760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a401610285565b60006101fd610463565b3660008037600080366000845af43d6000803e8080156103ac573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103ed83610503565b6000825111806103fa5750805b156101cf5761040983836102b8565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104386103b1565b604080516001600160a01b03928316815291841660208301520160405180910390a161016a81610543565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6103d5565b6060600080856001600160a01b0316856040516104a8919061083c565b600060405180830381855af49150503d80600081146104e3576040519150601f19603f3d011682016040523d82523d6000602084013e6104e8565b606091505b50915091506104f9868383876105ec565b9695505050505050565b61050c8161066d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105a85760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610285565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060831561065b578251600003610654576001600160a01b0385163b6106545760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610285565b5081610665565b6106658383610701565b949350505050565b6001600160a01b0381163b6106da5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610285565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6105cb565b8151156107115781518083602001fd5b8060405162461bcd60e51b81526004016102859190610809565b80356001600160a01b038116811461074257600080fd5b919050565b60006020828403121561075957600080fd5b6102dd8261072b565b60008060006040848603121561077757600080fd5b6107808461072b565b9250602084013567ffffffffffffffff8082111561079d57600080fd5b818601915086601f8301126107b157600080fd5b8135818111156107c057600080fd5b8760208285010111156107d257600080fd5b6020830194508093505050509250925092565b60005b838110156108005781810151838201526020016107e8565b50506000910152565b60208152600082518060208401526108288160408501602087016107e5565b601f01601f19169190910160400192915050565b6000825161084e8184602087016107e5565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220eaa9a4e34e6339207f9f4ee73803a16882cd2365f69bed76331cc1683744028e64736f6c63430008100033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d6de7042bd25751a8072b1fde58ce4223d86347c723b9bfe33e92e9f74861ac964736f6c63430008100033",
    "sourceMap": "670:18286:118:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14017:124;;;:::i;:::-;;;-1:-1:-1;;;;;178:32:176;;;160:51;;148:2;133:18;14017:124:118;;;;;;;;9723:115;;;:::i;5033:210::-;;;;;;:::i;:::-;;:::i;:::-;;11142:183;;;;;;:::i;:::-;;:::i;10069:153::-;;;;;;:::i;:::-;;:::i;16762:187::-;;;;;;:::i;:::-;;:::i;5772:204::-;;;;;;:::i;:::-;;:::i;12279:111::-;;;:::i;6428:149::-;;;;;;:::i;:::-;;:::i;14646:142::-;;;:::i;14350:113::-;;;:::i;13459:193::-;;;;;;:::i;:::-;;:::i;17319:174::-;;;;;;:::i;:::-;;:::i;3221:109::-;;;;;;:::i;:::-;;:::i;15011:142::-;;;:::i;12850:150::-;;;;;;:::i;:::-;;:::i;7086:192::-;;;;;;:::i;:::-;;:::i;13133:::-;;;;;;:::i;:::-;;:::i;15709:108::-;;;:::i;8182:127::-;;;:::i;16636:120::-;;;:::i;4635:127::-;;;:::i;13794:217::-;;;;;;:::i;:::-;;:::i;2784:103::-;;;:::i;:::-;;;;;;;:::i;15984:129::-;;;:::i;17061:131::-;;;;;;:::i;:::-;;:::i;4257:239::-;;;;;;:::i;:::-;;:::i;13658:130::-;;;:::i;8580:210::-;;;;;;:::i;:::-;;:::i;13331:122::-;;;:::i;6093:106::-;;;:::i;14794:211::-;;;;;;:::i;:::-;;:::i;1831:101:41:-;;;:::i;16119:216:118:-;;;;;;:::i;:::-;;:::i;14469:168::-;;;;;;:::i;:::-;;:::i;17198:115::-;;;:::i;8943:140::-;;;:::i;11912:180::-;;;;;;:::i;:::-;;:::i;5380:125::-;;;:::i;1201:85:41:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:41;1201:85;;6708:121:118;;;:::i;12396:150::-;;;;;;:::i;:::-;;:::i;10349:116::-;;;:::i;10714:179::-;;;;;;:::i;:::-;;:::i;16341:114::-;;;:::i;14147:197::-;;;;;;:::i;:::-;;:::i;9369:229::-;;;;;;:::i;:::-;;:::i;12733:111::-;;;:::i;15159:211::-;;;;;;:::i;:::-;;:::i;15505:198::-;;;;;;:::i;:::-;;:::i;3587:172::-;;;;;;:::i;:::-;;:::i;16955:100::-;;;:::i;13006:121::-;;;:::i;15376:123::-;;;:::i;11649:127::-;;;:::i;7422:134::-;;;:::i;7832:211::-;;;;;;:::i;:::-;;:::i;15823:155::-;;;;;;:::i;:::-;;:::i;2081:198:41:-;;;;;;:::i;:::-;;:::i;16461:169:118:-;;;;;;:::i;:::-;;:::i;3022:112::-;;;;;;:::i;:::-;;:::i;14017:124::-;14079:7;14105:29;-1:-1:-1;;;14105:10:118;:29::i;:::-;14098:36;;14017:124;:::o;9723:115::-;9781:7;9807:24;-1:-1:-1;;;9807:10:118;:24::i;5033:210::-;1094:13:41;:11;:13::i;:::-;-1:-1:-1;;;5128:30:118::1;::::0;;;:10:::1;:30;::::0;;:50;;-1:-1:-1;;;;;;5128:50:118::1;-1:-1:-1::0;;;;;5128:50:118;::::1;::::0;;::::1;::::0;;;:30;5193:43;5128:50;;5193:43:::1;::::0;::::1;5033:210:::0;:::o;11142:183::-;1094:13:41;:11;:13::i;:::-;11231:39:118::1;-1:-1:-1::0;;;11257:12:118::1;11231:11;:39::i;:::-;11285:33;::::0;-1:-1:-1;;;;;11285:33:118;::::1;::::0;::::1;::::0;;;::::1;11142:183:::0;:::o;10069:153::-;1094:13:41;:11;:13::i;:::-;-1:-1:-1;;;10145:24:118::1;::::0;;;:10:::1;:24;::::0;;:31;;-1:-1:-1;;;;;;10145:31:118::1;-1:-1:-1::0;;;;;10145:31:118;::::1;::::0;;::::1;::::0;;;:24;10191;10145:31;;10191:24:::1;::::0;::::1;10069:153:::0;:::o;16762:187::-;1094:13:41;:11;:13::i;:::-;-1:-1:-1;;;16849:27:118::1;::::0;;;:10:::1;:27;::::0;;:43;;-1:-1:-1;;;;;;16849:43:118::1;-1:-1:-1::0;;;;;16849:43:118;::::1;::::0;;::::1;::::0;;;:27;16907:35;16849:43;;16907:35:::1;::::0;::::1;16762:187:::0;:::o;5772:204::-;1094:13:41;:11;:13::i;:::-;-1:-1:-1;;;5865:29:118::1;::::0;;;:10:::1;:29;::::0;;:48;;-1:-1:-1;;;;;;5865:48:118::1;-1:-1:-1::0;;;;;5865:48:118;::::1;::::0;;::::1;::::0;;;:29;5928:41;5865:48;;5928:41:::1;::::0;::::1;5772:204:::0;:::o;12279:111::-;12335:7;12361:22;-1:-1:-1;;;12361:10:118;:22::i;6428:149::-;1094:13:41;:11;:13::i;:::-;-1:-1:-1;;;6503:19:118::1;::::0;;;:10:::1;:19;::::0;;:29;;-1:-1:-1;;;;;;6503:29:118::1;-1:-1:-1::0;;;;;6503:29:118;::::1;::::0;;::::1;::::0;;;:19;6547:23;6503:29;;6547:23:::1;::::0;::::1;6428:149:::0;:::o;14646:142::-;14717:7;14743:38;14754:26;14743:10;:38::i;14350:113::-;14407:7;14433:23;-1:-1:-1;;;14433:10:118;:23::i;13459:193::-;1094:13:41;:11;:13::i;:::-;-1:-1:-1;;;13548:28:118::1;::::0;;;:10:::1;:28;::::0;;:45;;-1:-1:-1;;;;;;13548:45:118::1;-1:-1:-1::0;;;;;13548:45:118;::::1;::::0;;::::1;::::0;;;:28;13608:37;13548:45;;13608:37:::1;::::0;::::1;13459:193:::0;:::o;17319:174::-;1094:13:41;:11;:13::i;:::-;-1:-1:-1;;;17402:24:118::1;::::0;;;:10:::1;:24;::::0;;:38;;-1:-1:-1;;;;;;17402:38:118::1;-1:-1:-1::0;;;;;17402:38:118;::::1;::::0;;::::1;::::0;;;:24;17455:31;17402:38;;17455:31:::1;::::0;::::1;17319:174:::0;:::o;3221:109::-;3283:7;3309:14;;;:10;:14;;;;;;-1:-1:-1;;;;;3309:14:118;;3221:109::o;15011:142::-;15082:7;15108:38;15119:26;15108:10;:38::i;12850:150::-;1094:13:41;:11;:13::i;:::-;-1:-1:-1;;;12925:22:118::1;::::0;;;:10:::1;:22;::::0;;:30;;-1:-1:-1;;;;;;12925:30:118::1;-1:-1:-1::0;;;;;12925:30:118;::::1;::::0;;::::1;::::0;;;:22;12970:23;12925:30;;12970:23:::1;::::0;::::1;12850:150:::0;:::o;7086:192::-;1094:13:41;:11;:13::i;:::-;-1:-1:-1;;;7175:27:118::1;::::0;;;:10:::1;:27;::::0;;:44;;-1:-1:-1;;;;;;7175:44:118::1;-1:-1:-1::0;;;;;7175:44:118;::::1;::::0;;::::1;::::0;;;:27;7234:37;7175:44;;7234:37:::1;::::0;::::1;7086:192:::0;:::o;13133:::-;1094:13:41;:11;:13::i;:::-;-1:-1:-1;;;13222:27:118::1;::::0;;;:10:::1;:27;::::0;;:44;;-1:-1:-1;;;;;;13222:44:118::1;-1:-1:-1::0;;;;;13222:44:118;::::1;::::0;;::::1;::::0;;;:27;13281:37;13222:44;;13281:37:::1;::::0;::::1;13133:192:::0;:::o;15709:108::-;15764:7;15790:20;-1:-1:-1;;;15790:10:118;:20::i;8182:127::-;8246:7;8272:30;-1:-1:-1;;;8272:10:118;:30::i;16636:120::-;16696:7;16722:27;-1:-1:-1;;;16722:10:118;:27::i;4635:127::-;4699:7;4725:30;-1:-1:-1;;;4725:10:118;:30::i;13794:217::-;1094:13:41;:11;:13::i;:::-;-1:-1:-1;;;13891:32:118::1;::::0;;;:10:::1;:32;::::0;;:53;;-1:-1:-1;;;;;;13891:53:118::1;-1:-1:-1::0;;;;;13891:53:118;::::1;::::0;;::::1;::::0;;;:32;13959:45;13891:53;;13959:45:::1;::::0;::::1;13794:217:::0;:::o;2784:103::-;2839:13;2871:9;2864:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2784:103;:::o;15984:129::-;16049:7;16075:31;-1:-1:-1;;;16075:10:118;:31::i;17061:131::-;1094:13:41;:11;:13::i;:::-;-1:-1:-1;;;17130:16:118::1;::::0;;;:10:::1;:16;::::0;;:23;;-1:-1:-1;;;;;;17130:23:118::1;-1:-1:-1::0;;;;;17130:23:118;::::1;::::0;;::::1;::::0;;;:16;17168:17;17130:23;;17168:17:::1;::::0;::::1;17061:131:::0;:::o;4257:239::-;1094:13:41;:11;:13::i;:::-;4393:38:118::1;4405:2;4409:21;4393:11;:38::i;:::-;4446:43;::::0;;3300:25:176;;;4484:4:118::1;3356:2:176::0;3341:18;;3334:50;-1:-1:-1;;;;;4446:43:118;::::1;::::0;::::1;::::0;3273:18:176;4446:43:118::1;;;;;;;;4257:239:::0;;:::o;13658:130::-;13723:7;13749:32;-1:-1:-1;;;13749:10:118;:32::i;8580:210::-;1094:13:41;:11;:13::i;:::-;-1:-1:-1;;;8675:30:118::1;::::0;;;:10:::1;:30;::::0;;:50;;-1:-1:-1;;;;;;8675:50:118::1;-1:-1:-1::0;;;;;8675:50:118;::::1;::::0;;::::1;::::0;;;:30;8740:43;8675:50;;8740:43:::1;::::0;::::1;8580:210:::0;:::o;13331:122::-;13392:7;13418:28;-1:-1:-1;;;13418:10:118;:28::i;6093:106::-;6147:7;6173:19;-1:-1:-1;;;6173:10:118;:19::i;14794:211::-;1094:13:41;:11;:13::i;:::-;14900:26:118::1;14889:38;::::0;;;:10:::1;:38;::::0;;:51;;-1:-1:-1;;;;;;14889:51:118::1;-1:-1:-1::0;;;;;14889:51:118;::::1;::::0;;::::1;::::0;;;:38;14955:43;14889:51;;14955:43:::1;::::0;::::1;14794:211:::0;:::o;1831:101:41:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;16119:216:118:-;1094:13:41;:11;:13::i;:::-;-1:-1:-1;;;16216:31:118::1;::::0;;;:10:::1;:31;::::0;;:52;;-1:-1:-1;;;;;;16216:52:118::1;-1:-1:-1::0;;;;;16216:52:118;::::1;::::0;;::::1;::::0;;;:31;16283:45;16216:52;;16283:45:::1;::::0;::::1;16119:216:::0;:::o;14469:168::-;1094:13:41;:11;:13::i;:::-;-1:-1:-1;;;14550:23:118::1;::::0;;;:10:::1;:23;::::0;;:36;;-1:-1:-1;;;;;;14550:36:118::1;-1:-1:-1::0;;;;;14550:36:118;::::1;::::0;;::::1;::::0;;;:23;14601:29;14550:36;;14601:29:::1;::::0;::::1;14469:168:::0;:::o;17198:115::-;17256:7;17282:24;-1:-1:-1;;;17282:10:118;:24::i;8943:140::-;9013:7;9039:37;-1:-1:-1;;;9039:10:118;:37::i;11912:180::-;1094:13:41;:11;:13::i;:::-;-1:-1:-1;;;11997:30:118::1;::::0;;;:10:::1;:30;::::0;;:40;;-1:-1:-1;;;;;;11997:40:118::1;-1:-1:-1::0;;;;;11997:40:118;::::1;::::0;;::::1;::::0;;;:30;12052:33;11997:40;;12052:33:::1;::::0;::::1;11912:180:::0;:::o;5380:125::-;5443:7;5469:29;-1:-1:-1;;;5469:10:118;:29::i;6708:121::-;6769:7;6795:27;-1:-1:-1;;;6795:10:118;:27::i;12396:150::-;1094:13:41;:11;:13::i;:::-;-1:-1:-1;;;12471:22:118::1;::::0;;;:10:::1;:22;::::0;;:30;;-1:-1:-1;;;;;;12471:30:118::1;-1:-1:-1::0;;;;;12471:30:118;::::1;::::0;;::::1;::::0;;;:22;12516:23;12471:30;;12516:23:::1;::::0;::::1;12396:150:::0;:::o;10349:116::-;10408:7;10434:24;-1:-1:-1;;;10434:10:118;:24::i;10714:179::-;1094:13:41;:11;:13::i;:::-;-1:-1:-1;;;10799:24:118::1;::::0;;;:10:::1;:24;::::0;;:39;;-1:-1:-1;;;;;;10799:39:118::1;-1:-1:-1::0;;;;;10799:39:118;::::1;::::0;;::::1;::::0;;;:24;10853:33;10799:39;;10853:33:::1;::::0;::::1;10714:179:::0;:::o;16341:114::-;16398:7;16424:24;-1:-1:-1;;;16424:10:118;:24::i;14147:197::-;1094:13:41;:11;:13::i;:::-;-1:-1:-1;;;14238:29:118::1;::::0;;;:10:::1;:29;::::0;;:47;;-1:-1:-1;;;;;;14238:47:118::1;-1:-1:-1::0;;;;;14238:47:118;::::1;::::0;;::::1;::::0;;;:29;14300:37;14238:47;;14300:37:::1;::::0;::::1;14147:197:::0;:::o;9369:229::-;1094:13:41;:11;:13::i;:::-;-1:-1:-1;;;9470:37:118::1;::::0;;;:10:::1;:37;::::0;;:57;;-1:-1:-1;;;;;;9470:57:118::1;-1:-1:-1::0;;;;;9470:57:118;::::1;::::0;;::::1;::::0;;;:37;9542:49;9470:57;;9542:49:::1;::::0;::::1;9369:229:::0;:::o;12733:111::-;12789:7;12815:22;-1:-1:-1;;;12815:10:118;:22::i;15159:211::-;1094:13:41;:11;:13::i;:::-;15265:26:118::1;15254:38;::::0;;;:10:::1;:38;::::0;;:51;;-1:-1:-1;;;;;;15254:51:118::1;-1:-1:-1::0;;;;;15254:51:118;::::1;::::0;;::::1;::::0;;;:38;15320:43;15254:51;;15320:43:::1;::::0;::::1;15159:211:::0;:::o;15505:198::-;1094:13:41;:11;:13::i;:::-;-1:-1:-1;;;15596:28:118::1;::::0;;;:10:::1;:28;::::0;;:46;;-1:-1:-1;;;;;;15596:46:118::1;-1:-1:-1::0;;;;;15596:46:118;::::1;::::0;;::::1;::::0;;;:28;15657:39;15596:46;;15657:39:::1;::::0;::::1;15505:198:::0;:::o;3587:172::-;1094:13:41;:11;:13::i;:::-;3677:14:118::1;::::0;;;:10:::1;:14;::::0;;;;;;;:27;;-1:-1:-1;;;;;;3677:27:118::1;-1:-1:-1::0;;;;;3677:27:118;::::1;::::0;;::::1;::::0;;;3719:33;;3300:25:176;;;3341:18;;;3334:50;;;;3719:33:118::1;::::0;3273:18:176;3719:33:118::1;3132:258:176::0;16955:100:118;17006:7;17032:16;-1:-1:-1;;;17032:10:118;:16::i;13006:121::-;13067:7;13093:27;-1:-1:-1;;;13093:10:118;:27::i;15376:123::-;15438:7;15464:28;-1:-1:-1;;;15464:10:118;:28::i;11649:127::-;11713:7;11739:30;-1:-1:-1;;;11739:10:118;:30::i;7422:134::-;7489:7;7515:34;-1:-1:-1;;;7515:10:118;:34::i;7832:211::-;1094:13:41;:11;:13::i;:::-;-1:-1:-1;;;7927:34:118::1;::::0;;;:10:::1;:34;::::0;;:51;;-1:-1:-1;;;;;;7927:51:118::1;-1:-1:-1::0;;;;;7927:51:118;::::1;::::0;;::::1;::::0;;;:34;7993:43;7927:51;;7993:43:::1;::::0;::::1;7832:211:::0;:::o;15823:155::-;1094:13:41;:11;:13::i;:::-;-1:-1:-1;;;15900:20:118::1;::::0;;;:10:::1;:20;::::0;;:31;;-1:-1:-1;;;;;;15900:31:118::1;-1:-1:-1::0;;;;;15900:31:118;::::1;::::0;;::::1;::::0;;;:20;15946:25;15900:31;;15946:25:::1;::::0;::::1;15823:155:::0;:::o;2081:198:41:-;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2169:22:41;::::1;2161:73;;;::::0;-1:-1:-1;;;2161:73:41;;3597:2:176;2161:73:41::1;::::0;::::1;3579:21:176::0;3636:2;3616:18;;;3609:30;3675:34;3655:18;;;3648:62;-1:-1:-1;;;3726:18:176;;;3719:36;3772:19;;2161:73:41::1;;;;;;;;;2244:28;2263:8;2244:18;:28::i;:::-;2081:198:::0;:::o;16461:169:118:-;1094:13:41;:11;:13::i;:::-;-1:-1:-1;;;16542:24:118::1;::::0;;;:10:::1;:24;::::0;;:37;;-1:-1:-1;;;;;;16542:37:118::1;-1:-1:-1::0;;;;;16542:37:118;::::1;::::0;;::::1;::::0;;;:24;16594:29;16542:37;;16594:29:::1;::::0;::::1;16461:169:::0;:::o;3022:112::-;1094:13:41;:11;:13::i;:::-;3105:22:118::1;3118:8;3105:12;:22::i;1359:130:41:-:0;1247:7;1273:6;-1:-1:-1;;;;;1273:6:41;719:10:65;1422:23:41;1414:68;;;;-1:-1:-1;;;1414:68:41;;4004:2:176;1414:68:41;;;3986:21:176;;;4023:18;;;4016:30;4082:34;4062:18;;;4055:62;4134:18;;1414:68:41;3802:356:176;18097:723:118;18169:28;18208:14;;;:10;:14;;;;;;-1:-1:-1;;;;;18208:14:118;;18234:580;;18302:61;;18357:4;18302:61;;;160:51:176;18280:19:118;;133:18:176;;18302:61:118;;;-1:-1:-1;;18302:61:118;;;;;;;;;;;;;;-1:-1:-1;;;;;18302:61:118;-1:-1:-1;;;18302:61:118;;;18470:60;18302:61;;-1:-1:-1;;;18496:10:118;;18516:4;;18302:61;;18470:60;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18545:14:118;;;;:10;:14;;;;;;;;;:31;;-1:-1:-1;;;;;;18545:31:118;-1:-1:-1;;;;;18545:31:118;;;;;;;;18595:32;;4730:25:176;;;18545:31:118;;-1:-1:-1;18545:31:118;;18595:32;;4703:18:176;18595:32:118;;;;;;;18266:372;;18159:661;18097:723;;:::o;18234:580::-;18776:27;;-1:-1:-1;;;18776:27:118;;-1:-1:-1;;;;;178:32:176;;;18776:27:118;;;160:51:176;18748:12:118;;18776:15;;;;;;133:18:176;;18776:27:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18644:170;18234:580;18159:661;18097:723;;:::o;2433:187:41:-;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:41;;;-1:-1:-1;;;;;;2541:17:41;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;18826:128:118:-;18891:9;:20;18903:8;18891:9;:20;:::i;:::-;;18926:21;18938:8;18926:21;;;;;;:::i;:::-;;;;;;;;18826:128;:::o;-1:-1:-1:-;;;;;;;;:::o;222:173:176:-;290:20;;-1:-1:-1;;;;;339:31:176;;329:42;;319:70;;385:1;382;375:12;319:70;222:173;;;:::o;400:186::-;459:6;512:2;500:9;491:7;487:23;483:32;480:52;;;528:1;525;518:12;480:52;551:29;570:9;551:29;:::i;:::-;541:39;400:186;-1:-1:-1;;;400:186:176:o;591:180::-;650:6;703:2;691:9;682:7;678:23;674:32;671:52;;;719:1;716;709:12;671:52;-1:-1:-1;742:23:176;;591:180;-1:-1:-1;591:180:176:o;776:423::-;818:3;856:5;850:12;883:6;878:3;871:19;908:1;918:162;932:6;929:1;926:13;918:162;;;994:4;1050:13;;;1046:22;;1040:29;1022:11;;;1018:20;;1011:59;947:12;918:162;;;922:3;1125:1;1118:4;1109:6;1104:3;1100:16;1096:27;1089:38;1188:4;1181:2;1177:7;1172:2;1164:6;1160:15;1156:29;1151:3;1147:39;1143:50;1136:57;;;776:423;;;;:::o;1204:220::-;1353:2;1342:9;1335:21;1316:4;1373:45;1414:2;1403:9;1399:18;1391:6;1373:45;:::i;1429:254::-;1497:6;1505;1558:2;1546:9;1537:7;1533:23;1529:32;1526:52;;;1574:1;1571;1564:12;1526:52;1610:9;1597:23;1587:33;;1639:38;1673:2;1662:9;1658:18;1639:38;:::i;:::-;1629:48;;1429:254;;;;;:::o;1688:127::-;1749:10;1744:3;1740:20;1737:1;1730:31;1780:4;1777:1;1770:15;1804:4;1801:1;1794:15;1820:922;1889:6;1942:2;1930:9;1921:7;1917:23;1913:32;1910:52;;;1958:1;1955;1948:12;1910:52;1998:9;1985:23;2027:18;2068:2;2060:6;2057:14;2054:34;;;2084:1;2081;2074:12;2054:34;2122:6;2111:9;2107:22;2097:32;;2167:7;2160:4;2156:2;2152:13;2148:27;2138:55;;2189:1;2186;2179:12;2138:55;2225:2;2212:16;2247:2;2243;2240:10;2237:36;;;2253:18;;:::i;:::-;2328:2;2322:9;2296:2;2382:13;;-1:-1:-1;;2378:22:176;;;2402:2;2374:31;2370:40;2358:53;;;2426:18;;;2446:22;;;2423:46;2420:72;;;2472:18;;:::i;:::-;2512:10;2508:2;2501:22;2547:2;2539:6;2532:18;2587:7;2582:2;2577;2573;2569:11;2565:20;2562:33;2559:53;;;2608:1;2605;2598:12;2559:53;2664:2;2659;2655;2651:11;2646:2;2638:6;2634:15;2621:46;2709:1;2687:15;;;2704:2;2683:24;2676:35;;;;-1:-1:-1;2691:6:176;1820:922;-1:-1:-1;;;;;1820:922:176:o;2747:380::-;2826:1;2822:12;;;;2869;;;2890:61;;2944:4;2936:6;2932:17;2922:27;;2890:61;2997:2;2989:6;2986:14;2966:18;2963:38;2960:161;;3043:10;3038:3;3034:20;3031:1;3024:31;3078:4;3075:1;3068:15;3106:4;3103:1;3096:15;2960:161;;2747:380;;;:::o;4163:416::-;-1:-1:-1;;;;;4404:15:176;;;4386:34;;4456:15;;4451:2;4436:18;;4429:43;4508:2;4503;4488:18;;4481:30;;;4329:4;;4528:45;;4554:18;;4546:6;4528:45;:::i;:::-;4520:53;4163:416;-1:-1:-1;;;;;4163:416:176:o;4892:545::-;4994:2;4989:3;4986:11;4983:448;;;5030:1;5055:5;5051:2;5044:17;5100:4;5096:2;5086:19;5170:2;5158:10;5154:19;5151:1;5147:27;5141:4;5137:38;5206:4;5194:10;5191:20;5188:47;;;-1:-1:-1;5229:4:176;5188:47;5284:2;5279:3;5275:12;5272:1;5268:20;5262:4;5258:31;5248:41;;5339:82;5357:2;5350:5;5347:13;5339:82;;;5402:17;;;5383:1;5372:13;5339:82;;;5343:3;;;4892:545;;;:::o;5613:1352::-;5739:3;5733:10;5766:18;5758:6;5755:30;5752:56;;;5788:18;;:::i;:::-;5817:97;5907:6;5867:38;5899:4;5893:11;5867:38;:::i;:::-;5861:4;5817:97;:::i;:::-;5969:4;;6033:2;6022:14;;6050:1;6045:663;;;;6752:1;6769:6;6766:89;;;-1:-1:-1;6821:19:176;;;6815:26;6766:89;-1:-1:-1;;5570:1:176;5566:11;;;5562:24;5558:29;5548:40;5594:1;5590:11;;;5545:57;6868:81;;6015:944;;6045:663;4839:1;4832:14;;;4876:4;4863:18;;-1:-1:-1;;6081:20:176;;;6199:236;6213:7;6210:1;6207:14;6199:236;;;6302:19;;;6296:26;6281:42;;6394:27;;;;6362:1;6350:14;;;;6229:19;;6199:236;;;6203:3;6463:6;6454:7;6451:19;6448:201;;;6524:19;;;6518:26;-1:-1:-1;;6607:1:176;6603:14;;;6619:3;6599:24;6595:37;6591:42;6576:58;6561:74;;6448:201;-1:-1:-1;;;;;6695:1:176;6679:14;;;6675:22;6662:36;;-1:-1:-1;5613:1352:176:o",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "getAddress(bytes32)": "21f8a721",
    "getCollateralManager()": "dfa441be",
    "getConfigurator()": "9b7ae5ec",
    "getDebtTokenImpl()": "47d2c534",
    "getDelegationRegistry()": "57d600a1",
    "getEmergencyAdmin()": "ddcaa9ea",
    "getExecutionDelegate()": "47f872f1",
    "getExecutionManager()": "862beee1",
    "getFTokenImpl()": "9fd192b8",
    "getFluidToken()": "1a8b1fbc",
    "getLending()": "69acea5f",
    "getLendingPool()": "0261bf8b",
    "getLendingRateManager()": "617e0605",
    "getMarketId()": "568ef470",
    "getNFTPriceOracle()": "673adf43",
    "getObligationReceipt()": "3fa01431",
    "getObligationReceiptBundle()": "7dd83ac5",
    "getPeerAdmin()": "146b9ae3",
    "getPeerIncentivesController()": "22e35383",
    "getPoolAdmin()": "aecda378",
    "getPoolIncentivesController()": "19ef9268",
    "getPriceConsumerV3()": "00926047",
    "getPromissoryNote()": "90313e8e",
    "getPromissoryNoteBundle()": "e4a2544d",
    "getReferralManager()": "de3c6e04",
    "getTreasury()": "3b19e84a",
    "getWETH()": "cae5f11e",
    "getWETHGateway()": "77532ed9",
    "owner()": "8da5cb5b",
    "renounceOwnership()": "715018a6",
    "setAddress(bytes32,address)": "ca446dd9",
    "setAddressAsProxy(bytes32,address)": "5dcc528c",
    "setCollateralManager(address)": "842a05d4",
    "setConfigurator(address)": "9f5f86ae",
    "setConfiguratorImpl(address)": "0c71b701",
    "setDebtTokenImpl(address)": "135dc147",
    "setDelegationRegistry(address)": "73aa9e94",
    "setEmergencyAdmin(address)": "35da3394",
    "setExecutionDelegate(address)": "037c9be2",
    "setExecutionManager(address)": "1381ba4d",
    "setFTokenImpl(address)": "f66e398f",
    "setFluidToken(address)": "74eb5a62",
    "setLending(address)": "180fde07",
    "setLendingPool(address)": "113aa8b1",
    "setLendingRateManager(address)": "4d82964c",
    "setMarketId(string)": "f67b1847",
    "setNFTPriceOracle(address)": "1e34764c",
    "setObligationReceipt(address)": "63ede0fc",
    "setObligationReceiptBundle(address)": "ad1f9944",
    "setPeerAdmin(address)": "98875827",
    "setPeerIncentivesController(address)": "c13e754b",
    "setPoolAdmin(address)": "283d62ad",
    "setPoolIncentivesController(address)": "6c6f33a5",
    "setPriceConsumerV3(address)": "a01246e3",
    "setPromissoryNote(address)": "2fedd807",
    "setPromissoryNoteBundle(address)": "ea34b961",
    "setReferralManager(address)": "c5f3a4c4",
    "setTreasury(address)": "f0f44260",
    "setWETH(address)": "5b769f3c",
    "setWETHGateway(address)": "21da5837",
    "transferOwnership(address)": "f2fde38b"
  },
  "rawMetadata": "{\"compiler\":{\"version\":\"0.8.16+commit.07a7930e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"marketId\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"hasProxy\",\"type\":\"bool\"}],\"name\":\"AddressSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"CollateralManagerUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"ConfiguratorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"DebtTokenImplUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"DelegationRegistryUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"EmergencyAdminUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"ExecutionDelegateUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"ExecutionManagerUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"FTokenImplUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"FluidTokenUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"LendingPoolUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"LendingRateManagerUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"LendingUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"newMarketId\",\"type\":\"string\"}],\"name\":\"MarketIdSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"NFTPriceOracleUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"ObligationReceiptBundleUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"ObligationReceiptUpdated\",\"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\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"PeerAdminUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"PeerIncentivesControllerUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"PoolAdminUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"PoolIncentivesControllerUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"PriceConsumerUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"PromissoryNoteBundleUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"PromissoryNoteUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"ProxyCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"ReferralManagerUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"TreasuryUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"WETHGatewayUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"WETHUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCollateralManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getConfigurator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDebtTokenImpl\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDelegationRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEmergencyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getExecutionDelegate\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getExecutionManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFTokenImpl\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFluidToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLending\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLendingPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLendingRateManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMarketId\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNFTPriceOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getObligationReceipt\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getObligationReceiptBundle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPeerAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPeerIncentivesController\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolIncentivesController\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPriceConsumerV3\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPromissoryNote\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPromissoryNoteBundle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReferralManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTreasury\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWETH\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWETHGateway\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"setAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"implementationAddress\",\"type\":\"address\"}],\"name\":\"setAddressAsProxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"setCollateralManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"configurator\",\"type\":\"address\"}],\"name\":\"setConfigurator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"configurator\",\"type\":\"address\"}],\"name\":\"setConfiguratorImpl\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"debtTokenImpl\",\"type\":\"address\"}],\"name\":\"setDebtTokenImpl\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegationRegistry\",\"type\":\"address\"}],\"name\":\"setDelegationRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"emergencyAdmin\",\"type\":\"address\"}],\"name\":\"setEmergencyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"executionDelegate\",\"type\":\"address\"}],\"name\":\"setExecutionDelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"executionManager\",\"type\":\"address\"}],\"name\":\"setExecutionManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fTokenImpl\",\"type\":\"address\"}],\"name\":\"setFTokenImpl\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fluidToken\",\"type\":\"address\"}],\"name\":\"setFluidToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"lending\",\"type\":\"address\"}],\"name\":\"setLending\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"setLendingPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"lendingRateManager\",\"type\":\"address\"}],\"name\":\"setLendingRateManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"marketId\",\"type\":\"string\"}],\"name\":\"setMarketId\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"nftPriceOracle\",\"type\":\"address\"}],\"name\":\"setNFTPriceOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"obligationReceipt\",\"type\":\"address\"}],\"name\":\"setObligationReceipt\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"obligationReceipt\",\"type\":\"address\"}],\"name\":\"setObligationReceiptBundle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"setPeerAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"controller\",\"type\":\"address\"}],\"name\":\"setPeerIncentivesController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"setPoolAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"controller\",\"type\":\"address\"}],\"name\":\"setPoolIncentivesController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"priceConsumerV3\",\"type\":\"address\"}],\"name\":\"setPriceConsumerV3\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"promissoryNote\",\"type\":\"address\"}],\"name\":\"setPromissoryNote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"promissoryNote\",\"type\":\"address\"}],\"name\":\"setPromissoryNoteBundle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"referralManager\",\"type\":\"address\"}],\"name\":\"setReferralManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"}],\"name\":\"setTreasury\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"weth\",\"type\":\"address\"}],\"name\":\"setWETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"wethGateway\",\"type\":\"address\"}],\"name\":\"setWETHGateway\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"FluidNFT*\",\"details\":\"Main registry of addresses part of or connected to the protocol, including permissioned roles - Acting also as factory of proxies and admin of those, so with right to change its implementations - Owned by the FluidNFT Governance\",\"kind\":\"dev\",\"methods\":{\"getAddress(bytes32)\":{\"details\":\"Returns an address by id\",\"returns\":{\"_0\":\"The address*\"}},\"getCollateralManager()\":{\"details\":\"Returns the address of the CollateralManager. Since the manager is used through delegateCall within the CollateralManager contract, the proxy contract pattern does not work properly hence the addresses are changed directly\",\"returns\":{\"_0\":\"The address of the CollateralManager*\"}},\"getConfigurator()\":{\"details\":\"Returns the address of the Configurator proxy\",\"returns\":{\"_0\":\"The Configurator proxy address*\"}},\"getExecutionDelegate()\":{\"details\":\"Returns the address of the Execution Delegate proxy\",\"returns\":{\"_0\":\"The Execution Delegate proxy address*\"}},\"getExecutionManager()\":{\"details\":\"Returns the address of the Execution Manager proxy\",\"returns\":{\"_0\":\"The Execution Manager proxy address*\"}},\"getLending()\":{\"details\":\"Returns the address of the Lending proxy\",\"returns\":{\"_0\":\"The Lending proxy address*\"}},\"getLendingPool()\":{\"details\":\"Returns the address of the LendingPool proxy\",\"returns\":{\"_0\":\"The LendingPool proxy address*\"}},\"getMarketId()\":{\"details\":\"Returns the id of the FluidNFT market to which this contracts points to\",\"returns\":{\"_0\":\"The market id*\"}},\"getObligationReceipt()\":{\"details\":\"Returns the address of the Obligation Receipt proxy\",\"returns\":{\"_0\":\"The Obligation Receipt proxy address*\"}},\"getObligationReceiptBundle()\":{\"details\":\"Returns the address of the Obligation Receipt Bundle proxy\",\"returns\":{\"_0\":\"The Obligation Receipt Bundle proxy address*\"}},\"getPeerAdmin()\":{\"details\":\"The functions below are getters/setters of addresses that are outside the context of the protocol hence the upgradable proxy pattern is not used*\"},\"getPoolAdmin()\":{\"details\":\"The functions below are getters/setters of addresses that are outside the context of the protocol hence the upgradable proxy pattern is not used*\"},\"getPromissoryNote()\":{\"details\":\"Returns the address of the PromissoryNote proxy\",\"returns\":{\"_0\":\"The PromissoryNote proxy address*\"}},\"getPromissoryNoteBundle()\":{\"details\":\"Returns the address of the PromissoryNoteBundle proxy\",\"returns\":{\"_0\":\"The PromissoryNote Bundle proxy address*\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setAddress(bytes32,address)\":{\"details\":\"Sets an address for an id replacing the address saved in the addresses map IMPORTANT Use this function carefully, as it will do a hard replacement\",\"params\":{\"id\":\"The id\",\"newAddress\":\"The address to set*\"}},\"setAddressAsProxy(bytes32,address)\":{\"details\":\"General function to update the implementation of a proxy registered with certain `id`. If there is no proxy registered, it will instantiate one and set as implementation the `implementationAddress` IMPORTANT Use this function carefully, only for ids that don't have an explicit setter function, in order to avoid unexpected consequences\",\"params\":{\"id\":\"The id\",\"implementationAddress\":\"The address of the new implementation*\"}},\"setCollateralManager(address)\":{\"details\":\"Updates the address of the CollateralManager\",\"params\":{\"manager\":\"The new CollateralManager address*\"}},\"setConfigurator(address)\":{\"details\":\"Updates the implementation of the Configurator, or creates the proxy setting the new `configurator` implementation on the first time calling it\",\"params\":{\"configurator\":\"The new Configurator implementation*\"}},\"setConfiguratorImpl(address)\":{\"details\":\"Updates the implementation of the Configurator, or creates the proxy setting the new `configurator` implementation on the first time calling it\",\"params\":{\"configurator\":\"The new Configurator implementation*\"}},\"setExecutionDelegate(address)\":{\"details\":\"Updates the implementation of the Execution Delegate, or creates the proxy setting the new `executionDelegate` implementation on the first time calling it\",\"params\":{\"executionDelegate\":\"The new Execution Delegate implementation*\"}},\"setExecutionManager(address)\":{\"details\":\"Updates the implementation of the Execution Manager, or creates the proxy setting the new `executionManager` implementation on the first time calling it\",\"params\":{\"executionManager\":\"The new Execution Manager implementation*\"}},\"setLending(address)\":{\"details\":\"Updates the implementation of the Lending, or creates the proxy setting the new `lending` implementation on the first time calling it\",\"params\":{\"lending\":\"The new Lending implementation*\"}},\"setLendingPool(address)\":{\"details\":\"Updates the implementation of the LendingPool, or creates the proxy setting the new `pool` implementation on the first time calling it\",\"params\":{\"pool\":\"The new LendingPool implementation*\"}},\"setMarketId(string)\":{\"details\":\"Allows to set the market which this AddressProvider represents\",\"params\":{\"marketId\":\"The market id*\"}},\"setObligationReceipt(address)\":{\"details\":\"Updates the implementation of the Obligation Receipt, or creates the proxy setting the new `obligationReceipt` implementation on the first time calling it\",\"params\":{\"obligationReceipt\":\"The new Obligation Receipt implementation*\"}},\"setObligationReceiptBundle(address)\":{\"details\":\"Updates the implementation of the Obligation Receipt Bundle, or creates the proxy setting the new `obligationReceiptBundle` implementation on the first time calling it\",\"params\":{\"obligationReceipt\":\"The new PromissoryNoteBundle implementation*\"}},\"setPromissoryNote(address)\":{\"details\":\"Updates the implementation of the PromissoryNote, or creates the proxy setting the new `promissoryNote` implementation on the first time calling it\",\"params\":{\"promissoryNote\":\"The new PromissoryNote implementation*\"}},\"setPromissoryNoteBundle(address)\":{\"details\":\"Updates the implementation of the PromissoryNote Bunlde, or creates the proxy setting the new `promissoryNoteBundle` implementation on the first time calling it\",\"params\":{\"promissoryNote\":\"The new PromissoryNoteBundle implementation*\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"AddressProvider contract\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/protocol/governance/AddressProvider.sol\":\"AddressProvider\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@chainlink/=lib/chainlink/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":chainlink/=lib/chainlink/integration-tests/contracts/ethereum/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688\",\"dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr\"]},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol\":{\"keccak256\":\"0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5\",\"dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn\"]},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol\":{\"keccak256\":\"0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8\",\"dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725\"]},\"lib/openzeppelin-contracts/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472\",\"dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN\"]},\"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354\",\"dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce\"]},\"lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"keccak256\":\"0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1\",\"dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ec772b45a624be516f1c81970caa8a2e144301e9d0921cbc1a2789fef39a1269\",\"dweb:/ipfs/QmNyjwxCrGhQMyzLD93oUobJXVe9ceJvRvfXwbEtuxPiEj\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4\",\"dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B\"]},\"src/interfaces/IAddressProvider.sol\":{\"keccak256\":\"0x6730abfcd8770e3279dad6137bf619ab98ee8b049e6dd85d2fbe87ba6224fde8\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://9b7d1588eab025b049f858ab2f329be7fec220198d956b9b61bf0b9bddc5761a\",\"dweb:/ipfs/QmTaFkYSUfWmbpsyE2TKC1QvP6eTDggZ72ZWodBhydqt5X\"]},\"src/protocol/governance/AddressProvider.sol\":{\"keccak256\":\"0x2c16b7a449e0f4eddbb372788f06abad7608507635dfd51271ef9aa5bfae0736\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://6640ec27704b75c68e8a5932e928ec96b3224aeb3238fc22f8e6b6e3b2adfce0\",\"dweb:/ipfs/Qmd7CmDrPvff7H9CHnj2eH1z67NxVpNsGYs92N9WkoxKxE\"]},\"src/protocol/libraries/helpers/Errors.sol\":{\"keccak256\":\"0x490e76871922e89a13ba0bb88977be18c143fa9d0cd9afb033744a3d81479c52\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://1c409d4d1e1689d8d8f3c3e361198d20f3b6476608c5316d8e2d91f52373e8e3\",\"dweb:/ipfs/QmRZaYpxqjmBpbxb51KqswKYPSeCsU3ejbmk5E3MrMxJaM\"]},\"src/protocol/libraries/proxy/FluidUpgradeableProxy.sol\":{\"keccak256\":\"0xebb381972c1d982d6cc8c2b1a704f9f2fefb75433e0adc84f896186da8ba2599\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://3706756fd653002ba56734f0f699decd7ba38993744a951acf0b259a95549087\",\"dweb:/ipfs/QmdZceFBVbYzBKZaQDfWEKYggJGxJ8G1j9ZWBrWLbozRZz\"]}},\"version\":1}",
  "metadata": {
    "compiler": {
      "version": "0.8.16+commit.07a7930e"
    },
    "language": "Solidity",
    "output": {
      "abi": [
        {
          "inputs": [
            {
              "internalType": "string",
              "name": "marketId",
              "type": "string"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "constructor"
        },
        {
          "inputs": [
            {
              "internalType": "bytes32",
              "name": "id",
              "type": "bytes32",
              "indexed": false
            },
            {
              "internalType": "address",
              "name": "newAddress",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "bool",
              "name": "hasProxy",
              "type": "bool",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "AddressSet",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "newAddress",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "CollateralManagerUpdated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "newAddress",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "ConfiguratorUpdated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "newAddress",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "DebtTokenImplUpdated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "newAddress",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "DelegationRegistryUpdated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "newAddress",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "EmergencyAdminUpdated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "newAddress",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "ExecutionDelegateUpdated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "newAddress",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "ExecutionManagerUpdated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "newAddress",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "FTokenImplUpdated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "newAddress",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "FluidTokenUpdated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "newAddress",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "LendingPoolUpdated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "newAddress",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "LendingRateManagerUpdated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "newAddress",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "LendingUpdated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "string",
              "name": "newMarketId",
              "type": "string",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "MarketIdSet",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "newAddress",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "NFTPriceOracleUpdated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "newAddress",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "ObligationReceiptBundleUpdated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "newAddress",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "ObligationReceiptUpdated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "previousOwner",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "newOwner",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "OwnershipTransferred",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "newAddress",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "PeerAdminUpdated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "newAddress",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "PeerIncentivesControllerUpdated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "newAddress",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "PoolAdminUpdated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "newAddress",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "PoolIncentivesControllerUpdated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "newAddress",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "PriceConsumerUpdated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "newAddress",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "PromissoryNoteBundleUpdated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "newAddress",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "PromissoryNoteUpdated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "bytes32",
              "name": "id",
              "type": "bytes32",
              "indexed": false
            },
            {
              "internalType": "address",
              "name": "newAddress",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "ProxyCreated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "newAddress",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "ReferralManagerUpdated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "newAddress",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "TreasuryUpdated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "newAddress",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "WETHGatewayUpdated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "newAddress",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "WETHUpdated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "bytes32",
              "name": "id",
              "type": "bytes32"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getAddress",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getCollateralManager",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getConfigurator",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getDebtTokenImpl",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getDelegationRegistry",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getEmergencyAdmin",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getExecutionDelegate",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getExecutionManager",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getFTokenImpl",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getFluidToken",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getLending",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getLendingPool",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getLendingRateManager",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getMarketId",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getNFTPriceOracle",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getObligationReceipt",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getObligationReceiptBundle",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getPeerAdmin",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getPeerIncentivesController",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getPoolAdmin",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getPoolIncentivesController",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getPriceConsumerV3",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getPromissoryNote",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getPromissoryNoteBundle",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getReferralManager",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getTreasury",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getWETH",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getWETHGateway",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "owner",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "renounceOwnership"
        },
        {
          "inputs": [
            {
              "internalType": "bytes32",
              "name": "id",
              "type": "bytes32"
            },
            {
              "internalType": "address",
              "name": "newAddress",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setAddress"
        },
        {
          "inputs": [
            {
              "internalType": "bytes32",
              "name": "id",
              "type": "bytes32"
            },
            {
              "internalType": "address",
              "name": "implementationAddress",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setAddressAsProxy"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "manager",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setCollateralManager"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "configurator",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setConfigurator"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "configurator",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setConfiguratorImpl"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "debtTokenImpl",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setDebtTokenImpl"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "delegationRegistry",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setDelegationRegistry"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "emergencyAdmin",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setEmergencyAdmin"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "executionDelegate",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setExecutionDelegate"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "executionManager",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setExecutionManager"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "fTokenImpl",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setFTokenImpl"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "fluidToken",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setFluidToken"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "lending",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setLending"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "pool",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setLendingPool"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "lendingRateManager",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setLendingRateManager"
        },
        {
          "inputs": [
            {
              "internalType": "string",
              "name": "marketId",
              "type": "string"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setMarketId"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "nftPriceOracle",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setNFTPriceOracle"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "obligationReceipt",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setObligationReceipt"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "obligationReceipt",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setObligationReceiptBundle"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "admin",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setPeerAdmin"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "controller",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setPeerIncentivesController"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "admin",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setPoolAdmin"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "controller",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setPoolIncentivesController"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "priceConsumerV3",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setPriceConsumerV3"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "promissoryNote",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setPromissoryNote"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "promissoryNote",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setPromissoryNoteBundle"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "referralManager",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setReferralManager"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "treasury",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setTreasury"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "weth",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setWETH"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "wethGateway",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setWETHGateway"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "newOwner",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "transferOwnership"
        }
      ],
      "devdoc": {
        "kind": "dev",
        "methods": {
          "getAddress(bytes32)": {
            "details": "Returns an address by id",
            "returns": {
              "_0": "The address*"
            }
          },
          "getCollateralManager()": {
            "details": "Returns the address of the CollateralManager. Since the manager is used through delegateCall within the CollateralManager contract, the proxy contract pattern does not work properly hence the addresses are changed directly",
            "returns": {
              "_0": "The address of the CollateralManager*"
            }
          },
          "getConfigurator()": {
            "details": "Returns the address of the Configurator proxy",
            "returns": {
              "_0": "The Configurator proxy address*"
            }
          },
          "getExecutionDelegate()": {
            "details": "Returns the address of the Execution Delegate proxy",
            "returns": {
              "_0": "The Execution Delegate proxy address*"
            }
          },
          "getExecutionManager()": {
            "details": "Returns the address of the Execution Manager proxy",
            "returns": {
              "_0": "The Execution Manager proxy address*"
            }
          },
          "getLending()": {
            "details": "Returns the address of the Lending proxy",
            "returns": {
              "_0": "The Lending proxy address*"
            }
          },
          "getLendingPool()": {
            "details": "Returns the address of the LendingPool proxy",
            "returns": {
              "_0": "The LendingPool proxy address*"
            }
          },
          "getMarketId()": {
            "details": "Returns the id of the FluidNFT market to which this contracts points to",
            "returns": {
              "_0": "The market id*"
            }
          },
          "getObligationReceipt()": {
            "details": "Returns the address of the Obligation Receipt proxy",
            "returns": {
              "_0": "The Obligation Receipt proxy address*"
            }
          },
          "getObligationReceiptBundle()": {
            "details": "Returns the address of the Obligation Receipt Bundle proxy",
            "returns": {
              "_0": "The Obligation Receipt Bundle proxy address*"
            }
          },
          "getPeerAdmin()": {
            "details": "The functions below are getters/setters of addresses that are outside the context of the protocol hence the upgradable proxy pattern is not used*"
          },
          "getPoolAdmin()": {
            "details": "The functions below are getters/setters of addresses that are outside the context of the protocol hence the upgradable proxy pattern is not used*"
          },
          "getPromissoryNote()": {
            "details": "Returns the address of the PromissoryNote proxy",
            "returns": {
              "_0": "The PromissoryNote proxy address*"
            }
          },
          "getPromissoryNoteBundle()": {
            "details": "Returns the address of the PromissoryNoteBundle proxy",
            "returns": {
              "_0": "The PromissoryNote Bundle proxy address*"
            }
          },
          "owner()": {
            "details": "Returns the address of the current owner."
          },
          "renounceOwnership()": {
            "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
          },
          "setAddress(bytes32,address)": {
            "details": "Sets an address for an id replacing the address saved in the addresses map IMPORTANT Use this function carefully, as it will do a hard replacement",
            "params": {
              "id": "The id",
              "newAddress": "The address to set*"
            }
          },
          "setAddressAsProxy(bytes32,address)": {
            "details": "General function to update the implementation of a proxy registered with certain `id`. If there is no proxy registered, it will instantiate one and set as implementation the `implementationAddress` IMPORTANT Use this function carefully, only for ids that don't have an explicit setter function, in order to avoid unexpected consequences",
            "params": {
              "id": "The id",
              "implementationAddress": "The address of the new implementation*"
            }
          },
          "setCollateralManager(address)": {
            "details": "Updates the address of the CollateralManager",
            "params": {
              "manager": "The new CollateralManager address*"
            }
          },
          "setConfigurator(address)": {
            "details": "Updates the implementation of the Configurator, or creates the proxy setting the new `configurator` implementation on the first time calling it",
            "params": {
              "configurator": "The new Configurator implementation*"
            }
          },
          "setConfiguratorImpl(address)": {
            "details": "Updates the implementation of the Configurator, or creates the proxy setting the new `configurator` implementation on the first time calling it",
            "params": {
              "configurator": "The new Configurator implementation*"
            }
          },
          "setExecutionDelegate(address)": {
            "details": "Updates the implementation of the Execution Delegate, or creates the proxy setting the new `executionDelegate` implementation on the first time calling it",
            "params": {
              "executionDelegate": "The new Execution Delegate implementation*"
            }
          },
          "setExecutionManager(address)": {
            "details": "Updates the implementation of the Execution Manager, or creates the proxy setting the new `executionManager` implementation on the first time calling it",
            "params": {
              "executionManager": "The new Execution Manager implementation*"
            }
          },
          "setLending(address)": {
            "details": "Updates the implementation of the Lending, or creates the proxy setting the new `lending` implementation on the first time calling it",
            "params": {
              "lending": "The new Lending implementation*"
            }
          },
          "setLendingPool(address)": {
            "details": "Updates the implementation of the LendingPool, or creates the proxy setting the new `pool` implementation on the first time calling it",
            "params": {
              "pool": "The new LendingPool implementation*"
            }
          },
          "setMarketId(string)": {
            "details": "Allows to set the market which this AddressProvider represents",
            "params": {
              "marketId": "The market id*"
            }
          },
          "setObligationReceipt(address)": {
            "details": "Updates the implementation of the Obligation Receipt, or creates the proxy setting the new `obligationReceipt` implementation on the first time calling it",
            "params": {
              "obligationReceipt": "The new Obligation Receipt implementation*"
            }
          },
          "setObligationReceiptBundle(address)": {
            "details": "Updates the implementation of the Obligation Receipt Bundle, or creates the proxy setting the new `obligationReceiptBundle` implementation on the first time calling it",
            "params": {
              "obligationReceipt": "The new PromissoryNoteBundle implementation*"
            }
          },
          "setPromissoryNote(address)": {
            "details": "Updates the implementation of the PromissoryNote, or creates the proxy setting the new `promissoryNote` implementation on the first time calling it",
            "params": {
              "promissoryNote": "The new PromissoryNote implementation*"
            }
          },
          "setPromissoryNoteBundle(address)": {
            "details": "Updates the implementation of the PromissoryNote Bunlde, or creates the proxy setting the new `promissoryNoteBundle` implementation on the first time calling it",
            "params": {
              "promissoryNote": "The new PromissoryNoteBundle implementation*"
            }
          },
          "transferOwnership(address)": {
            "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
          }
        },
        "version": 1
      },
      "userdoc": {
        "kind": "user",
        "methods": {},
        "version": 1
      }
    },
    "settings": {
      "remappings": [
        ":@chainlink/=lib/chainlink/",
        ":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
        ":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
        ":chainlink/=lib/chainlink/integration-tests/contracts/ethereum/src/",
        ":ds-test/=lib/forge-std/lib/ds-test/src/",
        ":forge-std/=lib/forge-std/src/"
      ],
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "metadata": {
        "bytecodeHash": "ipfs"
      },
      "compilationTarget": {
        "src/protocol/governance/AddressProvider.sol": "AddressProvider"
      },
      "libraries": {}
    },
    "sources": {
      "lib/openzeppelin-contracts/contracts/access/Ownable.sol": {
        "keccak256": "0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673",
        "urls": [
          "bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2",
          "dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": {
        "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff",
        "urls": [
          "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688",
          "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": {
        "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d",
        "urls": [
          "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5",
          "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": {
        "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a",
        "urls": [
          "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8",
          "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": {
        "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27",
        "urls": [
          "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472",
          "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": {
        "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61",
        "urls": [
          "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354",
          "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": {
        "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9",
        "urls": [
          "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1",
          "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/Address.sol": {
        "keccak256": "0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1",
        "urls": [
          "bzz-raw://ec772b45a624be516f1c81970caa8a2e144301e9d0921cbc1a2789fef39a1269",
          "dweb:/ipfs/QmNyjwxCrGhQMyzLD93oUobJXVe9ceJvRvfXwbEtuxPiEj"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/Context.sol": {
        "keccak256": "0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7",
        "urls": [
          "bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92",
          "dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": {
        "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d",
        "urls": [
          "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4",
          "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B"
        ],
        "license": "MIT"
      },
      "src/interfaces/IAddressProvider.sol": {
        "keccak256": "0x6730abfcd8770e3279dad6137bf619ab98ee8b049e6dd85d2fbe87ba6224fde8",
        "urls": [
          "bzz-raw://9b7d1588eab025b049f858ab2f329be7fec220198d956b9b61bf0b9bddc5761a",
          "dweb:/ipfs/QmTaFkYSUfWmbpsyE2TKC1QvP6eTDggZ72ZWodBhydqt5X"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/governance/AddressProvider.sol": {
        "keccak256": "0x2c16b7a449e0f4eddbb372788f06abad7608507635dfd51271ef9aa5bfae0736",
        "urls": [
          "bzz-raw://6640ec27704b75c68e8a5932e928ec96b3224aeb3238fc22f8e6b6e3b2adfce0",
          "dweb:/ipfs/Qmd7CmDrPvff7H9CHnj2eH1z67NxVpNsGYs92N9WkoxKxE"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/helpers/Errors.sol": {
        "keccak256": "0x490e76871922e89a13ba0bb88977be18c143fa9d0cd9afb033744a3d81479c52",
        "urls": [
          "bzz-raw://1c409d4d1e1689d8d8f3c3e361198d20f3b6476608c5316d8e2d91f52373e8e3",
          "dweb:/ipfs/QmRZaYpxqjmBpbxb51KqswKYPSeCsU3ejbmk5E3MrMxJaM"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/proxy/FluidUpgradeableProxy.sol": {
        "keccak256": "0xebb381972c1d982d6cc8c2b1a704f9f2fefb75433e0adc84f896186da8ba2599",
        "urls": [
          "bzz-raw://3706756fd653002ba56734f0f699decd7ba38993744a951acf0b259a95549087",
          "dweb:/ipfs/QmdZceFBVbYzBKZaQDfWEKYggJGxJ8G1j9ZWBrWLbozRZz"
        ],
        "license": "AGPL-3.0"
      }
    },
    "version": 1
  },
  "ast": {
    "absolutePath": "src/protocol/governance/AddressProvider.sol",
    "id": 52141,
    "exportedSymbols": {
      "AddressProvider": [
        52140
      ],
      "FluidUpgradeableProxy": [
        63013
      ],
      "IAddressProvider": [
        45718
      ],
      "Ownable": [
        30660
      ]
    },
    "nodeType": "SourceUnit",
    "src": "37:18920:118",
    "nodes": [
      {
        "id": 51032,
        "nodeType": "PragmaDirective",
        "src": "37:23:118",
        "nodes": [],
        "literals": [
          "solidity",
          "0.8",
          ".16"
        ]
      },
      {
        "id": 51034,
        "nodeType": "ImportDirective",
        "src": "131:73:118",
        "nodes": [],
        "absolutePath": "src/interfaces/IAddressProvider.sol",
        "file": "../../interfaces/IAddressProvider.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 52141,
        "sourceUnit": 45719,
        "symbolAliases": [
          {
            "foreign": {
              "id": 51033,
              "name": "IAddressProvider",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 45718,
              "src": "140:16:118",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 51036,
        "nodeType": "ImportDirective",
        "src": "205:85:118",
        "nodes": [],
        "absolutePath": "src/protocol/libraries/proxy/FluidUpgradeableProxy.sol",
        "file": "../libraries/proxy/FluidUpgradeableProxy.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 52141,
        "sourceUnit": 63014,
        "symbolAliases": [
          {
            "foreign": {
              "id": 51035,
              "name": "FluidUpgradeableProxy",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 63013,
              "src": "214:21:118",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 51038,
        "nodeType": "ImportDirective",
        "src": "292:69:118",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts/contracts/access/Ownable.sol",
        "file": "@openzeppelin/contracts/access/Ownable.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 52141,
        "sourceUnit": 30661,
        "symbolAliases": [
          {
            "foreign": {
              "id": 51037,
              "name": "Ownable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 30660,
              "src": "301:7:118",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 52140,
        "nodeType": "ContractDefinition",
        "src": "670:18286:118",
        "nodes": [
          {
            "id": 51045,
            "nodeType": "VariableDeclaration",
            "src": "730:24:118",
            "nodes": [],
            "constant": false,
            "mutability": "mutable",
            "name": "_marketId",
            "nameLocation": "745:9:118",
            "scope": 52140,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 51044,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "730:6:118",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "visibility": "private"
          },
          {
            "id": 51049,
            "nodeType": "VariableDeclaration",
            "src": "760:46:118",
            "nodes": [],
            "constant": false,
            "mutability": "mutable",
            "name": "_addresses",
            "nameLocation": "796:10:118",
            "scope": 52140,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
              "typeString": "mapping(bytes32 => address)"
            },
            "typeName": {
              "id": 51048,
              "keyType": {
                "id": 51046,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "768:7:118",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "760:27:118",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                "typeString": "mapping(bytes32 => address)"
              },
              "valueType": {
                "id": 51047,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "779:7:118",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "visibility": "private"
          },
          {
            "id": 51052,
            "nodeType": "VariableDeclaration",
            "src": "813:50:118",
            "nodes": [],
            "constant": true,
            "mutability": "constant",
            "name": "PEER_ADMIN",
            "nameLocation": "838:10:118",
            "scope": 52140,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 51050,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "813:7:118",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "504545525f41444d494e",
              "id": 51051,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "851:12:118",
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_3c28470b461a44f85600916f46cd850e1e12719822d5fdd44039d17444835628",
                "typeString": "literal_string \"PEER_ADMIN\""
              },
              "value": "PEER_ADMIN"
            },
            "visibility": "private"
          },
          {
            "id": 51055,
            "nodeType": "VariableDeclaration",
            "src": "869:50:118",
            "nodes": [],
            "constant": true,
            "mutability": "constant",
            "name": "POOL_ADMIN",
            "nameLocation": "894:10:118",
            "scope": 52140,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 51053,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "869:7:118",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "504f4f4c5f41444d494e",
              "id": 51054,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "907:12:118",
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_12ad05bde78c5ab75238ce885307f96ecd482bb402ef831f99e7018a0f169b7b",
                "typeString": "literal_string \"POOL_ADMIN\""
              },
              "value": "POOL_ADMIN"
            },
            "visibility": "private"
          },
          {
            "id": 51058,
            "nodeType": "VariableDeclaration",
            "src": "925:60:118",
            "nodes": [],
            "constant": true,
            "mutability": "constant",
            "name": "EMERGENCY_ADMIN",
            "nameLocation": "950:15:118",
            "scope": 52140,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 51056,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "925:7:118",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "454d455247454e43595f41444d494e",
              "id": 51057,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "968:17:118",
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_5c91514091af31f62f596a314af7d5be40146b2f2355969392f055e12e0982fb",
                "typeString": "literal_string \"EMERGENCY_ADMIN\""
              },
              "value": "EMERGENCY_ADMIN"
            },
            "visibility": "private"
          },
          {
            "id": 51061,
            "nodeType": "VariableDeclaration",
            "src": "991:66:118",
            "nodes": [],
            "constant": true,
            "mutability": "constant",
            "name": "EXECUTION_DELEGATE",
            "nameLocation": "1016:18:118",
            "scope": 52140,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 51059,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "991:7:118",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "455845435554494f4e5f44454c4547415445",
              "id": 51060,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1037:20:118",
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_5bb70ca978ce0aa8e96fb43c448643b5eea2ea390d4e05a18b848890a90e2736",
                "typeString": "literal_string \"EXECUTION_DELEGATE\""
              },
              "value": "EXECUTION_DELEGATE"
            },
            "visibility": "private"
          },
          {
            "id": 51064,
            "nodeType": "VariableDeclaration",
            "src": "1063:64:118",
            "nodes": [],
            "constant": true,
            "mutability": "constant",
            "name": "EXECUTION_MANAGER",
            "nameLocation": "1088:17:118",
            "scope": 52140,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 51062,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1063:7:118",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "455845435554494f4e5f4d414e41474552",
              "id": 51063,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1108:19:118",
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_438ceac5aa40a8d5f0a449ae6a6efeb8004589243e39f9aa71f0aed56dcac5af",
                "typeString": "literal_string \"EXECUTION_MANAGER\""
              },
              "value": "EXECUTION_MANAGER"
            },
            "visibility": "private"
          },
          {
            "id": 51067,
            "nodeType": "VariableDeclaration",
            "src": "1133:44:118",
            "nodes": [],
            "constant": true,
            "mutability": "constant",
            "name": "LENDING",
            "nameLocation": "1158:7:118",
            "scope": 52140,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 51065,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1133:7:118",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "4c454e44494e47",
              "id": 51066,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1168:9:118",
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_5bb6a25286bb8715dc575866da01fccb9319d7c050dc4a550830f9fd153b997c",
                "typeString": "literal_string \"LENDING\""
              },
              "value": "LENDING"
            },
            "visibility": "private"
          },
          {
            "id": 51070,
            "nodeType": "VariableDeclaration",
            "src": "1183:60:118",
            "nodes": [],
            "constant": true,
            "mutability": "constant",
            "name": "PROMISSORY_NOTE",
            "nameLocation": "1208:15:118",
            "scope": 52140,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 51068,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1183:7:118",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "50524f4d4953534f52595f4e4f5445",
              "id": 51069,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1226:17:118",
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_25e3460d91f05e72ee29313b164a9ce6e5c5bfe9d0280979471e5d4a217e0715",
                "typeString": "literal_string \"PROMISSORY_NOTE\""
              },
              "value": "PROMISSORY_NOTE"
            },
            "visibility": "private"
          },
          {
            "id": 51073,
            "nodeType": "VariableDeclaration",
            "src": "1249:74:118",
            "nodes": [],
            "constant": true,
            "mutability": "constant",
            "name": "PROMISSORY_NOTE_BUNDLE",
            "nameLocation": "1274:22:118",
            "scope": 52140,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 51071,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1249:7:118",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "50524f4d4953534f52595f4e4f54455f42554e444c45",
              "id": 51072,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1299:24:118",
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_86a98f98e05449ae0d2456558e934ec646f300999c56bc14f21e10ac7173eba1",
                "typeString": "literal_string \"PROMISSORY_NOTE_BUNDLE\""
              },
              "value": "PROMISSORY_NOTE_BUNDLE"
            },
            "visibility": "private"
          },
          {
            "id": 51076,
            "nodeType": "VariableDeclaration",
            "src": "1329:66:118",
            "nodes": [],
            "constant": true,
            "mutability": "constant",
            "name": "OBLIGATION_RECEIPT",
            "nameLocation": "1354:18:118",
            "scope": 52140,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 51074,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1329:7:118",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "4f424c49474154494f4e5f52454345495054",
              "id": 51075,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1375:20:118",
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_745ce3c52ea5ace358e9eaf912ef72e092ce1dcc5e3054b806267d5ddf212d4d",
                "typeString": "literal_string \"OBLIGATION_RECEIPT\""
              },
              "value": "OBLIGATION_RECEIPT"
            },
            "visibility": "private"
          },
          {
            "id": 51079,
            "nodeType": "VariableDeclaration",
            "src": "1401:80:118",
            "nodes": [],
            "constant": true,
            "mutability": "constant",
            "name": "OBLIGATION_RECEIPT_BUNDLE",
            "nameLocation": "1426:25:118",
            "scope": 52140,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 51077,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1401:7:118",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "4f424c49474154494f4e5f524543454950545f42554e444c45",
              "id": 51078,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1454:27:118",
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_28661120ffa3c963403a1ede901a4bc7e4489f68983bb0e83651ec7fc1254109",
                "typeString": "literal_string \"OBLIGATION_RECEIPT_BUNDLE\""
              },
              "value": "OBLIGATION_RECEIPT_BUNDLE"
            },
            "visibility": "private"
          },
          {
            "id": 51082,
            "nodeType": "VariableDeclaration",
            "src": "1487:54:118",
            "nodes": [],
            "constant": true,
            "mutability": "constant",
            "name": "LENDING_POOL",
            "nameLocation": "1512:12:118",
            "scope": 52140,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 51080,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1487:7:118",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "4c454e44494e475f504f4f4c",
              "id": 51081,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1527:14:118",
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_b0a02d474211257da1bdb72ce7e91b05cbdc99ae0876cb0a61bbc7ad100c58a7",
                "typeString": "literal_string \"LENDING_POOL\""
              },
              "value": "LENDING_POOL"
            },
            "visibility": "private"
          },
          {
            "id": 51085,
            "nodeType": "VariableDeclaration",
            "src": "1547:54:118",
            "nodes": [],
            "constant": true,
            "mutability": "constant",
            "name": "CONFIGURATOR",
            "nameLocation": "1572:12:118",
            "scope": 52140,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 51083,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1547:7:118",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "434f4e464947555241544f52",
              "id": 51084,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1587:14:118",
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_530008d2b058137d9c475b1b7d83984f1fcf1dd0e607659d029fc1517ab89268",
                "typeString": "literal_string \"CONFIGURATOR\""
              },
              "value": "CONFIGURATOR"
            },
            "visibility": "private"
          },
          {
            "id": 51088,
            "nodeType": "VariableDeclaration",
            "src": "1607:66:118",
            "nodes": [],
            "constant": true,
            "mutability": "constant",
            "name": "COLLATERAL_MANAGER",
            "nameLocation": "1632:18:118",
            "scope": 52140,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 51086,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1607:7:118",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "434f4c4c41544552414c5f4d414e41474552",
              "id": 51087,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1653:20:118",
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_413cc8bb35fe129dacd3dfaae80d6d4c5d313f64cee9dd6712e7ca52e38573a9",
                "typeString": "literal_string \"COLLATERAL_MANAGER\""
              },
              "value": "COLLATERAL_MANAGER"
            },
            "visibility": "private"
          },
          {
            "id": 51091,
            "nodeType": "VariableDeclaration",
            "src": "1679:62:118",
            "nodes": [],
            "constant": true,
            "mutability": "constant",
            "name": "NFT_PRICE_ORACLE",
            "nameLocation": "1704:16:118",
            "scope": 52140,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 51089,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1679:7:118",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "4e46545f50524943455f4f5241434c45",
              "id": 51090,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1723:18:118",
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_851585d39aba9444ce7c47f525bef99fb3e9fb094f8f701ae10eba8aed066493",
                "typeString": "literal_string \"NFT_PRICE_ORACLE\""
              },
              "value": "NFT_PRICE_ORACLE"
            },
            "visibility": "private"
          },
          {
            "id": 51094,
            "nodeType": "VariableDeclaration",
            "src": "1747:70:118",
            "nodes": [],
            "constant": true,
            "mutability": "constant",
            "name": "LENDING_RATE_MANAGER",
            "nameLocation": "1772:20:118",
            "scope": 52140,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 51092,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1747:7:118",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "4c454e44494e475f524154455f4d414e41474552",
              "id": 51093,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1795:22:118",
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_7d27246d18da5ffc51018fe9cc66d9f7324cf1934c1f3273df473db4f0486b94",
                "typeString": "literal_string \"LENDING_RATE_MANAGER\""
              },
              "value": "LENDING_RATE_MANAGER"
            },
            "visibility": "private"
          },
          {
            "id": 51097,
            "nodeType": "VariableDeclaration",
            "src": "1823:64:118",
            "nodes": [],
            "constant": true,
            "mutability": "constant",
            "name": "PRICE_CONSUMER_V3",
            "nameLocation": "1848:17:118",
            "scope": 52140,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 51095,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1823:7:118",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "50524943455f434f4e53554d45525f5633",
              "id": 51096,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1868:19:118",
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_dac594f34d5285042ecff3c140006df09cc5294261f17a467513837af45af841",
                "typeString": "literal_string \"PRICE_CONSUMER_V3\""
              },
              "value": "PRICE_CONSUMER_V3"
            },
            "visibility": "private"
          },
          {
            "id": 51100,
            "nodeType": "VariableDeclaration",
            "src": "1893:52:118",
            "nodes": [],
            "constant": true,
            "mutability": "constant",
            "name": "FLUID_TOKEN",
            "nameLocation": "1918:11:118",
            "scope": 52140,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 51098,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1893:7:118",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "464c5549445f544f4b454e",
              "id": 51099,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1932:13:118",
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_b2f1c4ed2940527a833a7095535c36b09647f5f42b5173b724da799f21b143ae",
                "typeString": "literal_string \"FLUID_TOKEN\""
              },
              "value": "FLUID_TOKEN"
            },
            "visibility": "private"
          },
          {
            "id": 51103,
            "nodeType": "VariableDeclaration",
            "src": "1951:82:118",
            "nodes": [],
            "constant": true,
            "mutability": "constant",
            "name": "POOL_INCENTIVES_CONTROLLER",
            "nameLocation": "1976:26:118",
            "scope": 52140,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 51101,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1951:7:118",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "504f4f4c5f494e43454e54495645535f434f4e54524f4c4c4552",
              "id": 51102,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2005:28:118",
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_70e2298ce4c93fc20376e630449796a60c7df9e5ada4c418c79934b3e8d8e66c",
                "typeString": "literal_string \"POOL_INCENTIVES_CONTROLLER\""
              },
              "value": "POOL_INCENTIVES_CONTROLLER"
            },
            "visibility": "private"
          },
          {
            "id": 51106,
            "nodeType": "VariableDeclaration",
            "src": "2039:82:118",
            "nodes": [],
            "constant": true,
            "mutability": "constant",
            "name": "PEER_INCENTIVES_CONTROLLER",
            "nameLocation": "2064:26:118",
            "scope": 52140,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 51104,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "2039:7:118",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "504545525f494e43454e54495645535f434f4e54524f4c4c4552",
              "id": 51105,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2093:28:118",
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_417597a82fd79675b56b1fa84f0c660cdffb0b9868b1d3d08d33e1a08e4c6f31",
                "typeString": "literal_string \"PEER_INCENTIVES_CONTROLLER\""
              },
              "value": "PEER_INCENTIVES_CONTROLLER"
            },
            "visibility": "private"
          },
          {
            "id": 51109,
            "nodeType": "VariableDeclaration",
            "src": "2127:62:118",
            "nodes": [],
            "constant": true,
            "mutability": "constant",
            "name": "REFERRAL_MANAGER",
            "nameLocation": "2152:16:118",
            "scope": 52140,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 51107,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "2127:7:118",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "524546455252414c5f4d414e41474552",
              "id": 51108,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2171:18:118",
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_ceb656422d2e5768b364a6526533f6832c483c8cfbd416512fbbd6fa6413f96a",
                "typeString": "literal_string \"REFERRAL_MANAGER\""
              },
              "value": "REFERRAL_MANAGER"
            },
            "visibility": "private"
          },
          {
            "id": 51112,
            "nodeType": "VariableDeclaration",
            "src": "2195:46:118",
            "nodes": [],
            "constant": true,
            "mutability": "constant",
            "name": "TREASURY",
            "nameLocation": "2220:8:118",
            "scope": 52140,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 51110,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "2195:7:118",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "5452454153555259",
              "id": 51111,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2231:10:118",
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_06aa03964db1f7257357ef09714a5f0ca3633723df419e97015e0c7a3e83edb7",
                "typeString": "literal_string \"TREASURY\""
              },
              "value": "TREASURY"
            },
            "visibility": "private"
          },
          {
            "id": 51115,
            "nodeType": "VariableDeclaration",
            "src": "2247:54:118",
            "nodes": [],
            "constant": true,
            "mutability": "constant",
            "name": "F_TOKEN_IMPL",
            "nameLocation": "2272:12:118",
            "scope": 52140,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 51113,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "2247:7:118",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "465f544f4b454e5f494d504c",
              "id": 51114,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2287:14:118",
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_424fe61346868fc363615853d5d06d270e953dc2ffeb930550c15b324ab8b40f",
                "typeString": "literal_string \"F_TOKEN_IMPL\""
              },
              "value": "F_TOKEN_IMPL"
            },
            "visibility": "private"
          },
          {
            "id": 51118,
            "nodeType": "VariableDeclaration",
            "src": "2307:60:118",
            "nodes": [],
            "constant": true,
            "mutability": "constant",
            "name": "DEBT_TOKEN_IMPL",
            "nameLocation": "2332:15:118",
            "scope": 52140,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 51116,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "2307:7:118",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "444542545f544f4b454e5f494d504c",
              "id": 51117,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2350:17:118",
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_653663d2e219f4fc39dc8dad121ddf458bd9655f5f7bf1e1814a0bc6dfee0684",
                "typeString": "literal_string \"DEBT_TOKEN_IMPL\""
              },
              "value": "DEBT_TOKEN_IMPL"
            },
            "visibility": "private"
          },
          {
            "id": 51121,
            "nodeType": "VariableDeclaration",
            "src": "2373:38:118",
            "nodes": [],
            "constant": true,
            "mutability": "constant",
            "name": "WETH",
            "nameLocation": "2398:4:118",
            "scope": 52140,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 51119,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "2373:7:118",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "57455448",
              "id": 51120,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2405:6:118",
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_0f8a193ff464434486c0daf7db2a895884365d2bc84ba47a68fcf89c1b14b5b8",
                "typeString": "literal_string \"WETH\""
              },
              "value": "WETH"
            },
            "visibility": "private"
          },
          {
            "id": 51124,
            "nodeType": "VariableDeclaration",
            "src": "2417:54:118",
            "nodes": [],
            "constant": true,
            "mutability": "constant",
            "name": "WETH_GATEWAY",
            "nameLocation": "2442:12:118",
            "scope": 52140,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 51122,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "2417:7:118",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "574554485f47415445574159",
              "id": 51123,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2457:14:118",
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_8c6c451a3c78b1a61d300b75cea4e998723915c4ab1ff7888c30dbbfcaf39efb",
                "typeString": "literal_string \"WETH_GATEWAY\""
              },
              "value": "WETH_GATEWAY"
            },
            "visibility": "private"
          },
          {
            "id": 51127,
            "nodeType": "VariableDeclaration",
            "src": "2498:68:118",
            "nodes": [],
            "constant": true,
            "mutability": "constant",
            "name": "DELEGATION_REGISTRY",
            "nameLocation": "2523:19:118",
            "scope": 52140,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 51125,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "2498:7:118",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "44454c45474154494f4e5f5245474953545259",
              "id": 51126,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2545:21:118",
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_1868cd9e1222a849fcc51d7ab8830dbf8227ee5424c0d98e2d2e668d9c5debb1",
                "typeString": "literal_string \"DELEGATION_REGISTRY\""
              },
              "value": "DELEGATION_REGISTRY"
            },
            "visibility": "private"
          },
          {
            "id": 51137,
            "nodeType": "FunctionDefinition",
            "src": "2573:75:118",
            "nodes": [],
            "body": {
              "id": 51136,
              "nodeType": "Block",
              "src": "2609:39:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51133,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51129,
                        "src": "2632:8:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 51132,
                      "name": "_setMarketId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 52139,
                      "src": "2619:12:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory)"
                      }
                    },
                    "id": 51134,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2619:22:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51135,
                  "nodeType": "ExpressionStatement",
                  "src": "2619:22:118"
                }
              ]
            },
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "parameters": {
              "id": 51130,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51129,
                  "mutability": "mutable",
                  "name": "marketId",
                  "nameLocation": "2599:8:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51137,
                  "src": "2585:22:118",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 51128,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2585:6:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2584:24:118"
            },
            "returnParameters": {
              "id": 51131,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2609:0:118"
            },
            "scope": 52140,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 51147,
            "nodeType": "FunctionDefinition",
            "src": "2784:103:118",
            "nodes": [],
            "body": {
              "id": 51146,
              "nodeType": "Block",
              "src": "2854:33:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 51144,
                    "name": "_marketId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 51045,
                    "src": "2871:9:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "functionReturnParameters": 51143,
                  "id": 51145,
                  "nodeType": "Return",
                  "src": "2864:16:118"
                }
              ]
            },
            "baseFunctions": [
              45426
            ],
            "documentation": {
              "id": 51138,
              "nodeType": "StructuredDocumentation",
              "src": "2654:125:118",
              "text": " @dev Returns the id of the FluidNFT market to which this contracts points to\n @return The market id*"
            },
            "functionSelector": "568ef470",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketId",
            "nameLocation": "2793:11:118",
            "overrides": {
              "id": 51140,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2821:8:118"
            },
            "parameters": {
              "id": 51139,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2804:2:118"
            },
            "returnParameters": {
              "id": 51143,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51142,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 51147,
                  "src": "2839:13:118",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 51141,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2839:6:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2838:15:118"
            },
            "scope": 52140,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51161,
            "nodeType": "FunctionDefinition",
            "src": "3022:112:118",
            "nodes": [],
            "body": {
              "id": 51160,
              "nodeType": "Block",
              "src": "3095:39:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51157,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51150,
                        "src": "3118:8:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 51156,
                      "name": "_setMarketId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 52139,
                      "src": "3105:12:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory)"
                      }
                    },
                    "id": 51158,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3105:22:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51159,
                  "nodeType": "ExpressionStatement",
                  "src": "3105:22:118"
                }
              ]
            },
            "baseFunctions": [
              45431
            ],
            "documentation": {
              "id": 51148,
              "nodeType": "StructuredDocumentation",
              "src": "2893:124:118",
              "text": " @dev Allows to set the market which this AddressProvider represents\n @param marketId The market id*"
            },
            "functionSelector": "f67b1847",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 51154,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 51153,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "3085:9:118"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 30579,
                  "src": "3085:9:118"
                },
                "nodeType": "ModifierInvocation",
                "src": "3085:9:118"
              }
            ],
            "name": "setMarketId",
            "nameLocation": "3031:11:118",
            "overrides": {
              "id": 51152,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3076:8:118"
            },
            "parameters": {
              "id": 51151,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51150,
                  "mutability": "mutable",
                  "name": "marketId",
                  "nameLocation": "3057:8:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51161,
                  "src": "3043:22:118",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 51149,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3043:6:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3042:24:118"
            },
            "returnParameters": {
              "id": 51155,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3095:0:118"
            },
            "scope": 52140,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51175,
            "nodeType": "FunctionDefinition",
            "src": "3221:109:118",
            "nodes": [],
            "body": {
              "id": 51174,
              "nodeType": "Block",
              "src": "3292:38:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "id": 51170,
                      "name": "_addresses",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51049,
                      "src": "3309:10:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                        "typeString": "mapping(bytes32 => address)"
                      }
                    },
                    "id": 51172,
                    "indexExpression": {
                      "id": 51171,
                      "name": "id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51164,
                      "src": "3320:2:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3309:14:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 51169,
                  "id": 51173,
                  "nodeType": "Return",
                  "src": "3302:21:118"
                }
              ]
            },
            "baseFunctions": [
              45438
            ],
            "documentation": {
              "id": 51162,
              "nodeType": "StructuredDocumentation",
              "src": "3140:76:118",
              "text": " @dev Returns an address by id\n @return The address*"
            },
            "functionSelector": "21f8a721",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getAddress",
            "nameLocation": "3230:10:118",
            "overrides": {
              "id": 51166,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3265:8:118"
            },
            "parameters": {
              "id": 51165,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51164,
                  "mutability": "mutable",
                  "name": "id",
                  "nameLocation": "3249:2:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51175,
                  "src": "3241:10:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 51163,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3241:7:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3240:12:118"
            },
            "returnParameters": {
              "id": 51169,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51168,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 51175,
                  "src": "3283:7:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51167,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3283:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3282:9:118"
            },
            "scope": 52140,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 51199,
            "nodeType": "FunctionDefinition",
            "src": "3587:172:118",
            "nodes": [],
            "body": {
              "id": 51198,
              "nodeType": "Block",
              "src": "3667:92:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 51190,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 51186,
                        "name": "_addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51049,
                        "src": "3677:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 51188,
                      "indexExpression": {
                        "id": 51187,
                        "name": "id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51178,
                        "src": "3688:2:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3677:14:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 51189,
                      "name": "newAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51180,
                      "src": "3694:10:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "3677:27:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 51191,
                  "nodeType": "ExpressionStatement",
                  "src": "3677:27:118"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 51193,
                        "name": "id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51178,
                        "src": "3730:2:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 51194,
                        "name": "newAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51180,
                        "src": "3734:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "hexValue": "66616c7365",
                        "id": 51195,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3746:5:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 51192,
                      "name": "AddressSet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45311,
                      "src": "3719:10:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bool_$returns$__$",
                        "typeString": "function (bytes32,address,bool)"
                      }
                    },
                    "id": 51196,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3719:33:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51197,
                  "nodeType": "EmitStatement",
                  "src": "3714:38:118"
                }
              ]
            },
            "baseFunctions": [
              45445
            ],
            "documentation": {
              "id": 51176,
              "nodeType": "StructuredDocumentation",
              "src": "3336:246:118",
              "text": " @dev Sets an address for an id replacing the address saved in the addresses map\n IMPORTANT Use this function carefully, as it will do a hard replacement\n @param id The id\n @param newAddress The address to set*"
            },
            "functionSelector": "ca446dd9",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 51184,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 51183,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "3657:9:118"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 30579,
                  "src": "3657:9:118"
                },
                "nodeType": "ModifierInvocation",
                "src": "3657:9:118"
              }
            ],
            "name": "setAddress",
            "nameLocation": "3596:10:118",
            "overrides": {
              "id": 51182,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3648:8:118"
            },
            "parameters": {
              "id": 51181,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51178,
                  "mutability": "mutable",
                  "name": "id",
                  "nameLocation": "3615:2:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51199,
                  "src": "3607:10:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 51177,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3607:7:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51180,
                  "mutability": "mutable",
                  "name": "newAddress",
                  "nameLocation": "3627:10:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51199,
                  "src": "3619:18:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51179,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3619:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3606:32:118"
            },
            "returnParameters": {
              "id": 51185,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3667:0:118"
            },
            "scope": 52140,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51222,
            "nodeType": "FunctionDefinition",
            "src": "4257:239:118",
            "nodes": [],
            "body": {
              "id": 51221,
              "nodeType": "Block",
              "src": "4383:113:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51211,
                        "name": "id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51202,
                        "src": "4405:2:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 51212,
                        "name": "implementationAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51204,
                        "src": "4409:21:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 51210,
                      "name": "_updateImpl",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 52125,
                      "src": "4393:11:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 51213,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4393:38:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51214,
                  "nodeType": "ExpressionStatement",
                  "src": "4393:38:118"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 51216,
                        "name": "id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51202,
                        "src": "4457:2:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 51217,
                        "name": "implementationAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51204,
                        "src": "4461:21:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "hexValue": "74727565",
                        "id": 51218,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4484:4:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 51215,
                      "name": "AddressSet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45311,
                      "src": "4446:10:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bool_$returns$__$",
                        "typeString": "function (bytes32,address,bool)"
                      }
                    },
                    "id": 51219,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4446:43:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51220,
                  "nodeType": "EmitStatement",
                  "src": "4441:48:118"
                }
              ]
            },
            "baseFunctions": [
              45452
            ],
            "documentation": {
              "id": 51200,
              "nodeType": "StructuredDocumentation",
              "src": "3765:487:118",
              "text": " @dev General function to update the implementation of a proxy registered with\n certain `id`. If there is no proxy registered, it will instantiate one and\n set as implementation the `implementationAddress`\n IMPORTANT Use this function carefully, only for ids that don't have an explicit\n setter function, in order to avoid unexpected consequences\n @param id The id\n @param implementationAddress The address of the new implementation*"
            },
            "functionSelector": "5dcc528c",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 51208,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 51207,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "4369:9:118"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 30579,
                  "src": "4369:9:118"
                },
                "nodeType": "ModifierInvocation",
                "src": "4369:9:118"
              }
            ],
            "name": "setAddressAsProxy",
            "nameLocation": "4266:17:118",
            "overrides": {
              "id": 51206,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4352:8:118"
            },
            "parameters": {
              "id": 51205,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51202,
                  "mutability": "mutable",
                  "name": "id",
                  "nameLocation": "4292:2:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51222,
                  "src": "4284:10:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 51201,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4284:7:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 51204,
                  "mutability": "mutable",
                  "name": "implementationAddress",
                  "nameLocation": "4304:21:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51222,
                  "src": "4296:29:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51203,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4296:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4283:43:118"
            },
            "returnParameters": {
              "id": 51209,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4383:0:118"
            },
            "scope": 52140,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51234,
            "nodeType": "FunctionDefinition",
            "src": "4635:127:118",
            "nodes": [],
            "body": {
              "id": 51233,
              "nodeType": "Block",
              "src": "4708:54:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51230,
                        "name": "EXECUTION_DELEGATE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51061,
                        "src": "4736:18:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 51229,
                      "name": "getAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51175,
                      "src": "4725:10:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view returns (address)"
                      }
                    },
                    "id": 51231,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4725:30:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 51228,
                  "id": 51232,
                  "nodeType": "Return",
                  "src": "4718:37:118"
                }
              ]
            },
            "baseFunctions": [
              45457
            ],
            "documentation": {
              "id": 51223,
              "nodeType": "StructuredDocumentation",
              "src": "4502:128:118",
              "text": " @dev Returns the address of the Execution Delegate proxy\n @return The Execution Delegate proxy address*"
            },
            "functionSelector": "47f872f1",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getExecutionDelegate",
            "nameLocation": "4644:20:118",
            "overrides": {
              "id": 51225,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4681:8:118"
            },
            "parameters": {
              "id": 51224,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4664:2:118"
            },
            "returnParameters": {
              "id": 51228,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51227,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 51234,
                  "src": "4699:7:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51226,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4699:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4698:9:118"
            },
            "scope": 52140,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51254,
            "nodeType": "FunctionDefinition",
            "src": "5033:210:118",
            "nodes": [],
            "body": {
              "id": 51253,
              "nodeType": "Block",
              "src": "5118:125:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 51247,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 51243,
                        "name": "_addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51049,
                        "src": "5128:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 51245,
                      "indexExpression": {
                        "id": 51244,
                        "name": "EXECUTION_DELEGATE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51061,
                        "src": "5139:18:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5128:30:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 51246,
                      "name": "executionDelegate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51237,
                      "src": "5161:17:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "5128:50:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 51248,
                  "nodeType": "ExpressionStatement",
                  "src": "5128:50:118"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 51250,
                        "name": "executionDelegate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51237,
                        "src": "5218:17:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 51249,
                      "name": "ExecutionDelegateUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45315,
                      "src": "5193:24:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 51251,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5193:43:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51252,
                  "nodeType": "EmitStatement",
                  "src": "5188:48:118"
                }
              ]
            },
            "baseFunctions": [
              45462
            ],
            "documentation": {
              "id": 51235,
              "nodeType": "StructuredDocumentation",
              "src": "4768:260:118",
              "text": " @dev Updates the implementation of the Execution Delegate, or creates the proxy\n setting the new `executionDelegate` implementation on the first time calling it\n @param executionDelegate The new Execution Delegate implementation*"
            },
            "functionSelector": "037c9be2",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 51241,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 51240,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "5108:9:118"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 30579,
                  "src": "5108:9:118"
                },
                "nodeType": "ModifierInvocation",
                "src": "5108:9:118"
              }
            ],
            "name": "setExecutionDelegate",
            "nameLocation": "5042:20:118",
            "overrides": {
              "id": 51239,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5099:8:118"
            },
            "parameters": {
              "id": 51238,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51237,
                  "mutability": "mutable",
                  "name": "executionDelegate",
                  "nameLocation": "5071:17:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51254,
                  "src": "5063:25:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51236,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5063:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5062:27:118"
            },
            "returnParameters": {
              "id": 51242,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5118:0:118"
            },
            "scope": 52140,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51266,
            "nodeType": "FunctionDefinition",
            "src": "5380:125:118",
            "nodes": [],
            "body": {
              "id": 51265,
              "nodeType": "Block",
              "src": "5452:53:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51262,
                        "name": "EXECUTION_MANAGER",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51064,
                        "src": "5480:17:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 51261,
                      "name": "getAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51175,
                      "src": "5469:10:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view returns (address)"
                      }
                    },
                    "id": 51263,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5469:29:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 51260,
                  "id": 51264,
                  "nodeType": "Return",
                  "src": "5462:36:118"
                }
              ]
            },
            "baseFunctions": [
              45467
            ],
            "documentation": {
              "id": 51255,
              "nodeType": "StructuredDocumentation",
              "src": "5249:126:118",
              "text": " @dev Returns the address of the Execution Manager proxy\n @return The Execution Manager proxy address*"
            },
            "functionSelector": "862beee1",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getExecutionManager",
            "nameLocation": "5389:19:118",
            "overrides": {
              "id": 51257,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5425:8:118"
            },
            "parameters": {
              "id": 51256,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5408:2:118"
            },
            "returnParameters": {
              "id": 51260,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51259,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 51266,
                  "src": "5443:7:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51258,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5443:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5442:9:118"
            },
            "scope": 52140,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51286,
            "nodeType": "FunctionDefinition",
            "src": "5772:204:118",
            "nodes": [],
            "body": {
              "id": 51285,
              "nodeType": "Block",
              "src": "5855:121:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 51279,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 51275,
                        "name": "_addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51049,
                        "src": "5865:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 51277,
                      "indexExpression": {
                        "id": 51276,
                        "name": "EXECUTION_MANAGER",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51064,
                        "src": "5876:17:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5865:29:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 51278,
                      "name": "executionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51269,
                      "src": "5897:16:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "5865:48:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 51280,
                  "nodeType": "ExpressionStatement",
                  "src": "5865:48:118"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 51282,
                        "name": "executionManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51269,
                        "src": "5952:16:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 51281,
                      "name": "ExecutionManagerUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45319,
                      "src": "5928:23:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 51283,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5928:41:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51284,
                  "nodeType": "EmitStatement",
                  "src": "5923:46:118"
                }
              ]
            },
            "baseFunctions": [
              45472
            ],
            "documentation": {
              "id": 51267,
              "nodeType": "StructuredDocumentation",
              "src": "5511:256:118",
              "text": " @dev Updates the implementation of the Execution Manager, or creates the proxy\n setting the new `executionManager` implementation on the first time calling it\n @param executionManager The new Execution Manager implementation*"
            },
            "functionSelector": "1381ba4d",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 51273,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 51272,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "5845:9:118"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 30579,
                  "src": "5845:9:118"
                },
                "nodeType": "ModifierInvocation",
                "src": "5845:9:118"
              }
            ],
            "name": "setExecutionManager",
            "nameLocation": "5781:19:118",
            "overrides": {
              "id": 51271,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5836:8:118"
            },
            "parameters": {
              "id": 51270,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51269,
                  "mutability": "mutable",
                  "name": "executionManager",
                  "nameLocation": "5809:16:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51286,
                  "src": "5801:24:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51268,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5801:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5800:26:118"
            },
            "returnParameters": {
              "id": 51274,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5855:0:118"
            },
            "scope": 52140,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51298,
            "nodeType": "FunctionDefinition",
            "src": "6093:106:118",
            "nodes": [],
            "body": {
              "id": 51297,
              "nodeType": "Block",
              "src": "6156:43:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51294,
                        "name": "LENDING",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51067,
                        "src": "6184:7:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 51293,
                      "name": "getAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51175,
                      "src": "6173:10:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view returns (address)"
                      }
                    },
                    "id": 51295,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6173:19:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 51292,
                  "id": 51296,
                  "nodeType": "Return",
                  "src": "6166:26:118"
                }
              ]
            },
            "baseFunctions": [
              45477
            ],
            "documentation": {
              "id": 51287,
              "nodeType": "StructuredDocumentation",
              "src": "5982:106:118",
              "text": " @dev Returns the address of the Lending proxy\n @return The Lending proxy address*"
            },
            "functionSelector": "69acea5f",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getLending",
            "nameLocation": "6102:10:118",
            "overrides": {
              "id": 51289,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6129:8:118"
            },
            "parameters": {
              "id": 51288,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6112:2:118"
            },
            "returnParameters": {
              "id": 51292,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51291,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 51298,
                  "src": "6147:7:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51290,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6147:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6146:9:118"
            },
            "scope": 52140,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51318,
            "nodeType": "FunctionDefinition",
            "src": "6428:149:118",
            "nodes": [],
            "body": {
              "id": 51317,
              "nodeType": "Block",
              "src": "6493:84:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 51311,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 51307,
                        "name": "_addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51049,
                        "src": "6503:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 51309,
                      "indexExpression": {
                        "id": 51308,
                        "name": "LENDING",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51067,
                        "src": "6514:7:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "6503:19:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 51310,
                      "name": "lending",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51301,
                      "src": "6525:7:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "6503:29:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 51312,
                  "nodeType": "ExpressionStatement",
                  "src": "6503:29:118"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 51314,
                        "name": "lending",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51301,
                        "src": "6562:7:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 51313,
                      "name": "LendingUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45323,
                      "src": "6547:14:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 51315,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6547:23:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51316,
                  "nodeType": "EmitStatement",
                  "src": "6542:28:118"
                }
              ]
            },
            "baseFunctions": [
              45482
            ],
            "documentation": {
              "id": 51299,
              "nodeType": "StructuredDocumentation",
              "src": "6205:218:118",
              "text": " @dev Updates the implementation of the Lending, or creates the proxy\n setting the new `lending` implementation on the first time calling it\n @param lending The new Lending implementation*"
            },
            "functionSelector": "180fde07",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 51305,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 51304,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "6483:9:118"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 30579,
                  "src": "6483:9:118"
                },
                "nodeType": "ModifierInvocation",
                "src": "6483:9:118"
              }
            ],
            "name": "setLending",
            "nameLocation": "6437:10:118",
            "overrides": {
              "id": 51303,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6474:8:118"
            },
            "parameters": {
              "id": 51302,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51301,
                  "mutability": "mutable",
                  "name": "lending",
                  "nameLocation": "6456:7:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51318,
                  "src": "6448:15:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51300,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6448:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6447:17:118"
            },
            "returnParameters": {
              "id": 51306,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6493:0:118"
            },
            "scope": 52140,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51330,
            "nodeType": "FunctionDefinition",
            "src": "6708:121:118",
            "nodes": [],
            "body": {
              "id": 51329,
              "nodeType": "Block",
              "src": "6778:51:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51326,
                        "name": "PROMISSORY_NOTE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51070,
                        "src": "6806:15:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 51325,
                      "name": "getAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51175,
                      "src": "6795:10:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view returns (address)"
                      }
                    },
                    "id": 51327,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6795:27:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 51324,
                  "id": 51328,
                  "nodeType": "Return",
                  "src": "6788:34:118"
                }
              ]
            },
            "baseFunctions": [
              45487
            ],
            "documentation": {
              "id": 51319,
              "nodeType": "StructuredDocumentation",
              "src": "6583:120:118",
              "text": " @dev Returns the address of the PromissoryNote proxy\n @return The PromissoryNote proxy address*"
            },
            "functionSelector": "90313e8e",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getPromissoryNote",
            "nameLocation": "6717:17:118",
            "overrides": {
              "id": 51321,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6751:8:118"
            },
            "parameters": {
              "id": 51320,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6734:2:118"
            },
            "returnParameters": {
              "id": 51324,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51323,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 51330,
                  "src": "6769:7:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51322,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6769:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6768:9:118"
            },
            "scope": 52140,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51350,
            "nodeType": "FunctionDefinition",
            "src": "7086:192:118",
            "nodes": [],
            "body": {
              "id": 51349,
              "nodeType": "Block",
              "src": "7165:113:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 51343,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 51339,
                        "name": "_addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51049,
                        "src": "7175:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 51341,
                      "indexExpression": {
                        "id": 51340,
                        "name": "PROMISSORY_NOTE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51070,
                        "src": "7186:15:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7175:27:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 51342,
                      "name": "promissoryNote",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51333,
                      "src": "7205:14:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "7175:44:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 51344,
                  "nodeType": "ExpressionStatement",
                  "src": "7175:44:118"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 51346,
                        "name": "promissoryNote",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51333,
                        "src": "7256:14:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 51345,
                      "name": "PromissoryNoteUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45327,
                      "src": "7234:21:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 51347,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7234:37:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51348,
                  "nodeType": "EmitStatement",
                  "src": "7229:42:118"
                }
              ]
            },
            "baseFunctions": [
              45492
            ],
            "documentation": {
              "id": 51331,
              "nodeType": "StructuredDocumentation",
              "src": "6835:246:118",
              "text": " @dev Updates the implementation of the PromissoryNote, or creates the proxy\n setting the new `promissoryNote` implementation on the first time calling it\n @param promissoryNote The new PromissoryNote implementation*"
            },
            "functionSelector": "2fedd807",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 51337,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 51336,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "7155:9:118"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 30579,
                  "src": "7155:9:118"
                },
                "nodeType": "ModifierInvocation",
                "src": "7155:9:118"
              }
            ],
            "name": "setPromissoryNote",
            "nameLocation": "7095:17:118",
            "overrides": {
              "id": 51335,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "7146:8:118"
            },
            "parameters": {
              "id": 51334,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51333,
                  "mutability": "mutable",
                  "name": "promissoryNote",
                  "nameLocation": "7121:14:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51350,
                  "src": "7113:22:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51332,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7113:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7112:24:118"
            },
            "returnParameters": {
              "id": 51338,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7165:0:118"
            },
            "scope": 52140,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51362,
            "nodeType": "FunctionDefinition",
            "src": "7422:134:118",
            "nodes": [],
            "body": {
              "id": 51361,
              "nodeType": "Block",
              "src": "7498:58:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51358,
                        "name": "PROMISSORY_NOTE_BUNDLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51073,
                        "src": "7526:22:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 51357,
                      "name": "getAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51175,
                      "src": "7515:10:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view returns (address)"
                      }
                    },
                    "id": 51359,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7515:34:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 51356,
                  "id": 51360,
                  "nodeType": "Return",
                  "src": "7508:41:118"
                }
              ]
            },
            "baseFunctions": [
              45497
            ],
            "documentation": {
              "id": 51351,
              "nodeType": "StructuredDocumentation",
              "src": "7284:133:118",
              "text": " @dev Returns the address of the PromissoryNoteBundle proxy\n @return The PromissoryNote Bundle proxy address*"
            },
            "functionSelector": "e4a2544d",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getPromissoryNoteBundle",
            "nameLocation": "7431:23:118",
            "overrides": {
              "id": 51353,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "7471:8:118"
            },
            "parameters": {
              "id": 51352,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7454:2:118"
            },
            "returnParameters": {
              "id": 51356,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51355,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 51362,
                  "src": "7489:7:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51354,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7489:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7488:9:118"
            },
            "scope": 52140,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51382,
            "nodeType": "FunctionDefinition",
            "src": "7832:211:118",
            "nodes": [],
            "body": {
              "id": 51381,
              "nodeType": "Block",
              "src": "7917:126:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 51375,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 51371,
                        "name": "_addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51049,
                        "src": "7927:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 51373,
                      "indexExpression": {
                        "id": 51372,
                        "name": "PROMISSORY_NOTE_BUNDLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51073,
                        "src": "7938:22:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7927:34:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 51374,
                      "name": "promissoryNote",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51365,
                      "src": "7964:14:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "7927:51:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 51376,
                  "nodeType": "ExpressionStatement",
                  "src": "7927:51:118"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 51378,
                        "name": "promissoryNote",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51365,
                        "src": "8021:14:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 51377,
                      "name": "PromissoryNoteBundleUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45331,
                      "src": "7993:27:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 51379,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7993:43:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51380,
                  "nodeType": "EmitStatement",
                  "src": "7988:48:118"
                }
              ]
            },
            "baseFunctions": [
              45502
            ],
            "documentation": {
              "id": 51363,
              "nodeType": "StructuredDocumentation",
              "src": "7562:265:118",
              "text": " @dev Updates the implementation of the PromissoryNote Bunlde, or creates the proxy\n setting the new `promissoryNoteBundle` implementation on the first time calling it\n @param promissoryNote The new PromissoryNoteBundle implementation*"
            },
            "functionSelector": "ea34b961",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 51369,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 51368,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "7907:9:118"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 30579,
                  "src": "7907:9:118"
                },
                "nodeType": "ModifierInvocation",
                "src": "7907:9:118"
              }
            ],
            "name": "setPromissoryNoteBundle",
            "nameLocation": "7841:23:118",
            "overrides": {
              "id": 51367,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "7898:8:118"
            },
            "parameters": {
              "id": 51366,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51365,
                  "mutability": "mutable",
                  "name": "promissoryNote",
                  "nameLocation": "7873:14:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51382,
                  "src": "7865:22:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51364,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7865:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7864:24:118"
            },
            "returnParameters": {
              "id": 51370,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7917:0:118"
            },
            "scope": 52140,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51394,
            "nodeType": "FunctionDefinition",
            "src": "8182:127:118",
            "nodes": [],
            "body": {
              "id": 51393,
              "nodeType": "Block",
              "src": "8255:54:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51390,
                        "name": "OBLIGATION_RECEIPT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51076,
                        "src": "8283:18:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 51389,
                      "name": "getAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51175,
                      "src": "8272:10:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view returns (address)"
                      }
                    },
                    "id": 51391,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8272:30:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 51388,
                  "id": 51392,
                  "nodeType": "Return",
                  "src": "8265:37:118"
                }
              ]
            },
            "baseFunctions": [
              45507
            ],
            "documentation": {
              "id": 51383,
              "nodeType": "StructuredDocumentation",
              "src": "8049:128:118",
              "text": " @dev Returns the address of the Obligation Receipt proxy\n @return The Obligation Receipt proxy address*"
            },
            "functionSelector": "3fa01431",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getObligationReceipt",
            "nameLocation": "8191:20:118",
            "overrides": {
              "id": 51385,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "8228:8:118"
            },
            "parameters": {
              "id": 51384,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8211:2:118"
            },
            "returnParameters": {
              "id": 51388,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51387,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 51394,
                  "src": "8246:7:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51386,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8246:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8245:9:118"
            },
            "scope": 52140,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51414,
            "nodeType": "FunctionDefinition",
            "src": "8580:210:118",
            "nodes": [],
            "body": {
              "id": 51413,
              "nodeType": "Block",
              "src": "8665:125:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 51407,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 51403,
                        "name": "_addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51049,
                        "src": "8675:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 51405,
                      "indexExpression": {
                        "id": 51404,
                        "name": "OBLIGATION_RECEIPT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51076,
                        "src": "8686:18:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8675:30:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 51406,
                      "name": "obligationReceipt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51397,
                      "src": "8708:17:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "8675:50:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 51408,
                  "nodeType": "ExpressionStatement",
                  "src": "8675:50:118"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 51410,
                        "name": "obligationReceipt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51397,
                        "src": "8765:17:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 51409,
                      "name": "ObligationReceiptUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45335,
                      "src": "8740:24:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 51411,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8740:43:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51412,
                  "nodeType": "EmitStatement",
                  "src": "8735:48:118"
                }
              ]
            },
            "baseFunctions": [
              45512
            ],
            "documentation": {
              "id": 51395,
              "nodeType": "StructuredDocumentation",
              "src": "8315:260:118",
              "text": " @dev Updates the implementation of the Obligation Receipt, or creates the proxy\n setting the new `obligationReceipt` implementation on the first time calling it\n @param obligationReceipt The new Obligation Receipt implementation*"
            },
            "functionSelector": "63ede0fc",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 51401,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 51400,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "8655:9:118"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 30579,
                  "src": "8655:9:118"
                },
                "nodeType": "ModifierInvocation",
                "src": "8655:9:118"
              }
            ],
            "name": "setObligationReceipt",
            "nameLocation": "8589:20:118",
            "overrides": {
              "id": 51399,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "8646:8:118"
            },
            "parameters": {
              "id": 51398,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51397,
                  "mutability": "mutable",
                  "name": "obligationReceipt",
                  "nameLocation": "8618:17:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51414,
                  "src": "8610:25:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51396,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8610:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8609:27:118"
            },
            "returnParameters": {
              "id": 51402,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8665:0:118"
            },
            "scope": 52140,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51426,
            "nodeType": "FunctionDefinition",
            "src": "8943:140:118",
            "nodes": [],
            "body": {
              "id": 51425,
              "nodeType": "Block",
              "src": "9022:61:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51422,
                        "name": "OBLIGATION_RECEIPT_BUNDLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51079,
                        "src": "9050:25:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 51421,
                      "name": "getAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51175,
                      "src": "9039:10:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view returns (address)"
                      }
                    },
                    "id": 51423,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9039:37:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 51420,
                  "id": 51424,
                  "nodeType": "Return",
                  "src": "9032:44:118"
                }
              ]
            },
            "baseFunctions": [
              45517
            ],
            "documentation": {
              "id": 51415,
              "nodeType": "StructuredDocumentation",
              "src": "8796:142:118",
              "text": " @dev Returns the address of the Obligation Receipt Bundle proxy\n @return The Obligation Receipt Bundle proxy address*"
            },
            "functionSelector": "7dd83ac5",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getObligationReceiptBundle",
            "nameLocation": "8952:26:118",
            "overrides": {
              "id": 51417,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "8995:8:118"
            },
            "parameters": {
              "id": 51416,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8978:2:118"
            },
            "returnParameters": {
              "id": 51420,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51419,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 51426,
                  "src": "9013:7:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51418,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9013:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9012:9:118"
            },
            "scope": 52140,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51446,
            "nodeType": "FunctionDefinition",
            "src": "9369:229:118",
            "nodes": [],
            "body": {
              "id": 51445,
              "nodeType": "Block",
              "src": "9460:138:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 51439,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 51435,
                        "name": "_addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51049,
                        "src": "9470:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 51437,
                      "indexExpression": {
                        "id": 51436,
                        "name": "OBLIGATION_RECEIPT_BUNDLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51079,
                        "src": "9481:25:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "9470:37:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 51438,
                      "name": "obligationReceipt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51429,
                      "src": "9510:17:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "9470:57:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 51440,
                  "nodeType": "ExpressionStatement",
                  "src": "9470:57:118"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 51442,
                        "name": "obligationReceipt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51429,
                        "src": "9573:17:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 51441,
                      "name": "ObligationReceiptBundleUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45339,
                      "src": "9542:30:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 51443,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9542:49:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51444,
                  "nodeType": "EmitStatement",
                  "src": "9537:54:118"
                }
              ]
            },
            "baseFunctions": [
              45522
            ],
            "documentation": {
              "id": 51427,
              "nodeType": "StructuredDocumentation",
              "src": "9089:275:118",
              "text": " @dev Updates the implementation of the Obligation Receipt Bundle, or creates the proxy\n setting the new `obligationReceiptBundle` implementation on the first time calling it\n @param obligationReceipt The new PromissoryNoteBundle implementation*"
            },
            "functionSelector": "ad1f9944",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 51433,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 51432,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "9450:9:118"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 30579,
                  "src": "9450:9:118"
                },
                "nodeType": "ModifierInvocation",
                "src": "9450:9:118"
              }
            ],
            "name": "setObligationReceiptBundle",
            "nameLocation": "9378:26:118",
            "overrides": {
              "id": 51431,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "9441:8:118"
            },
            "parameters": {
              "id": 51430,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51429,
                  "mutability": "mutable",
                  "name": "obligationReceipt",
                  "nameLocation": "9413:17:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51446,
                  "src": "9405:25:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51428,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9405:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9404:27:118"
            },
            "returnParameters": {
              "id": 51434,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9460:0:118"
            },
            "scope": 52140,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51458,
            "nodeType": "FunctionDefinition",
            "src": "9723:115:118",
            "nodes": [],
            "body": {
              "id": 51457,
              "nodeType": "Block",
              "src": "9790:48:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51454,
                        "name": "LENDING_POOL",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51082,
                        "src": "9818:12:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 51453,
                      "name": "getAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51175,
                      "src": "9807:10:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view returns (address)"
                      }
                    },
                    "id": 51455,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9807:24:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 51452,
                  "id": 51456,
                  "nodeType": "Return",
                  "src": "9800:31:118"
                }
              ]
            },
            "baseFunctions": [
              45527
            ],
            "documentation": {
              "id": 51447,
              "nodeType": "StructuredDocumentation",
              "src": "9604:114:118",
              "text": " @dev Returns the address of the LendingPool proxy\n @return The LendingPool proxy address*"
            },
            "functionSelector": "0261bf8b",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getLendingPool",
            "nameLocation": "9732:14:118",
            "overrides": {
              "id": 51449,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "9763:8:118"
            },
            "parameters": {
              "id": 51448,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9746:2:118"
            },
            "returnParameters": {
              "id": 51452,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51451,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 51458,
                  "src": "9781:7:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51450,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9781:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9780:9:118"
            },
            "scope": 52140,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51478,
            "nodeType": "FunctionDefinition",
            "src": "10069:153:118",
            "nodes": [],
            "body": {
              "id": 51477,
              "nodeType": "Block",
              "src": "10135:87:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 51471,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 51467,
                        "name": "_addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51049,
                        "src": "10145:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 51469,
                      "indexExpression": {
                        "id": 51468,
                        "name": "LENDING_POOL",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51082,
                        "src": "10156:12:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "10145:24:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 51470,
                      "name": "pool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51461,
                      "src": "10172:4:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "10145:31:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 51472,
                  "nodeType": "ExpressionStatement",
                  "src": "10145:31:118"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 51474,
                        "name": "pool",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51461,
                        "src": "10210:4:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 51473,
                      "name": "LendingPoolUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45343,
                      "src": "10191:18:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 51475,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10191:24:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51476,
                  "nodeType": "EmitStatement",
                  "src": "10186:29:118"
                }
              ]
            },
            "baseFunctions": [
              45532
            ],
            "documentation": {
              "id": 51459,
              "nodeType": "StructuredDocumentation",
              "src": "9844:220:118",
              "text": " @dev Updates the implementation of the LendingPool, or creates the proxy\n setting the new `pool` implementation on the first time calling it\n @param pool The new LendingPool implementation*"
            },
            "functionSelector": "113aa8b1",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 51465,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 51464,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "10125:9:118"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 30579,
                  "src": "10125:9:118"
                },
                "nodeType": "ModifierInvocation",
                "src": "10125:9:118"
              }
            ],
            "name": "setLendingPool",
            "nameLocation": "10078:14:118",
            "overrides": {
              "id": 51463,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "10116:8:118"
            },
            "parameters": {
              "id": 51462,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51461,
                  "mutability": "mutable",
                  "name": "pool",
                  "nameLocation": "10101:4:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51478,
                  "src": "10093:12:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51460,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10093:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10092:14:118"
            },
            "returnParameters": {
              "id": 51466,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10135:0:118"
            },
            "scope": 52140,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51490,
            "nodeType": "FunctionDefinition",
            "src": "10349:116:118",
            "nodes": [],
            "body": {
              "id": 51489,
              "nodeType": "Block",
              "src": "10417:48:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51486,
                        "name": "CONFIGURATOR",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51085,
                        "src": "10445:12:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 51485,
                      "name": "getAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51175,
                      "src": "10434:10:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view returns (address)"
                      }
                    },
                    "id": 51487,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10434:24:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 51484,
                  "id": 51488,
                  "nodeType": "Return",
                  "src": "10427:31:118"
                }
              ]
            },
            "baseFunctions": [
              45537
            ],
            "documentation": {
              "id": 51479,
              "nodeType": "StructuredDocumentation",
              "src": "10228:116:118",
              "text": " @dev Returns the address of the Configurator proxy\n @return The Configurator proxy address*"
            },
            "functionSelector": "9b7ae5ec",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getConfigurator",
            "nameLocation": "10358:15:118",
            "overrides": {
              "id": 51481,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "10390:8:118"
            },
            "parameters": {
              "id": 51480,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10373:2:118"
            },
            "returnParameters": {
              "id": 51484,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51483,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 51490,
                  "src": "10408:7:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51482,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10408:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10407:9:118"
            },
            "scope": 52140,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51510,
            "nodeType": "FunctionDefinition",
            "src": "10714:179:118",
            "nodes": [],
            "body": {
              "id": 51509,
              "nodeType": "Block",
              "src": "10789:104:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 51503,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 51499,
                        "name": "_addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51049,
                        "src": "10799:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 51501,
                      "indexExpression": {
                        "id": 51500,
                        "name": "CONFIGURATOR",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51085,
                        "src": "10810:12:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "10799:24:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 51502,
                      "name": "configurator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51493,
                      "src": "10826:12:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "10799:39:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 51504,
                  "nodeType": "ExpressionStatement",
                  "src": "10799:39:118"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 51506,
                        "name": "configurator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51493,
                        "src": "10873:12:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 51505,
                      "name": "ConfiguratorUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45347,
                      "src": "10853:19:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 51507,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10853:33:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51508,
                  "nodeType": "EmitStatement",
                  "src": "10848:38:118"
                }
              ]
            },
            "baseFunctions": [
              45542
            ],
            "documentation": {
              "id": 51491,
              "nodeType": "StructuredDocumentation",
              "src": "10471:238:118",
              "text": " @dev Updates the implementation of the Configurator, or creates the proxy\n setting the new `configurator` implementation on the first time calling it\n @param configurator The new Configurator implementation*"
            },
            "functionSelector": "9f5f86ae",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 51497,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 51496,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "10779:9:118"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 30579,
                  "src": "10779:9:118"
                },
                "nodeType": "ModifierInvocation",
                "src": "10779:9:118"
              }
            ],
            "name": "setConfigurator",
            "nameLocation": "10723:15:118",
            "overrides": {
              "id": 51495,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "10770:8:118"
            },
            "parameters": {
              "id": 51494,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51493,
                  "mutability": "mutable",
                  "name": "configurator",
                  "nameLocation": "10747:12:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51510,
                  "src": "10739:20:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51492,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10739:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10738:22:118"
            },
            "returnParameters": {
              "id": 51498,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10789:0:118"
            },
            "scope": 52140,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51529,
            "nodeType": "FunctionDefinition",
            "src": "11142:183:118",
            "nodes": [],
            "body": {
              "id": 51528,
              "nodeType": "Block",
              "src": "11221:104:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51520,
                        "name": "CONFIGURATOR",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51085,
                        "src": "11243:12:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 51521,
                        "name": "configurator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51513,
                        "src": "11257:12:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 51519,
                      "name": "_updateImpl",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 52125,
                      "src": "11231:11:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 51522,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11231:39:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51523,
                  "nodeType": "ExpressionStatement",
                  "src": "11231:39:118"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 51525,
                        "name": "configurator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51513,
                        "src": "11305:12:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 51524,
                      "name": "ConfiguratorUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45347,
                      "src": "11285:19:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 51526,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11285:33:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51527,
                  "nodeType": "EmitStatement",
                  "src": "11280:38:118"
                }
              ]
            },
            "baseFunctions": [
              45547
            ],
            "documentation": {
              "id": 51511,
              "nodeType": "StructuredDocumentation",
              "src": "10899:238:118",
              "text": " @dev Updates the implementation of the Configurator, or creates the proxy\n setting the new `configurator` implementation on the first time calling it\n @param configurator The new Configurator implementation*"
            },
            "functionSelector": "0c71b701",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 51517,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 51516,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "11211:9:118"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 30579,
                  "src": "11211:9:118"
                },
                "nodeType": "ModifierInvocation",
                "src": "11211:9:118"
              }
            ],
            "name": "setConfiguratorImpl",
            "nameLocation": "11151:19:118",
            "overrides": {
              "id": 51515,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "11202:8:118"
            },
            "parameters": {
              "id": 51514,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51513,
                  "mutability": "mutable",
                  "name": "configurator",
                  "nameLocation": "11179:12:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51529,
                  "src": "11171:20:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51512,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11171:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11170:22:118"
            },
            "returnParameters": {
              "id": 51518,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11221:0:118"
            },
            "scope": 52140,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51541,
            "nodeType": "FunctionDefinition",
            "src": "11649:127:118",
            "nodes": [],
            "body": {
              "id": 51540,
              "nodeType": "Block",
              "src": "11722:54:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51537,
                        "name": "COLLATERAL_MANAGER",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51088,
                        "src": "11750:18:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 51536,
                      "name": "getAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51175,
                      "src": "11739:10:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view returns (address)"
                      }
                    },
                    "id": 51538,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11739:30:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 51535,
                  "id": 51539,
                  "nodeType": "Return",
                  "src": "11732:37:118"
                }
              ]
            },
            "baseFunctions": [
              45552
            ],
            "documentation": {
              "id": 51530,
              "nodeType": "StructuredDocumentation",
              "src": "11331:313:118",
              "text": " @dev Returns the address of the CollateralManager. Since the manager is used\n through delegateCall within the CollateralManager contract, the proxy contract pattern does not work properly hence\n the addresses are changed directly\n @return The address of the CollateralManager*"
            },
            "functionSelector": "dfa441be",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getCollateralManager",
            "nameLocation": "11658:20:118",
            "overrides": {
              "id": 51532,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "11695:8:118"
            },
            "parameters": {
              "id": 51531,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11678:2:118"
            },
            "returnParameters": {
              "id": 51535,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51534,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 51541,
                  "src": "11713:7:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51533,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11713:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11712:9:118"
            },
            "scope": 52140,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51561,
            "nodeType": "FunctionDefinition",
            "src": "11912:180:118",
            "nodes": [],
            "body": {
              "id": 51560,
              "nodeType": "Block",
              "src": "11987:105:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 51554,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 51550,
                        "name": "_addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51049,
                        "src": "11997:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 51552,
                      "indexExpression": {
                        "id": 51551,
                        "name": "COLLATERAL_MANAGER",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51088,
                        "src": "12008:18:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "11997:30:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 51553,
                      "name": "manager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51544,
                      "src": "12030:7:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "11997:40:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 51555,
                  "nodeType": "ExpressionStatement",
                  "src": "11997:40:118"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 51557,
                        "name": "manager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51544,
                        "src": "12077:7:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 51556,
                      "name": "CollateralManagerUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45351,
                      "src": "12052:24:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 51558,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12052:33:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51559,
                  "nodeType": "EmitStatement",
                  "src": "12047:38:118"
                }
              ]
            },
            "baseFunctions": [
              45557
            ],
            "documentation": {
              "id": 51542,
              "nodeType": "StructuredDocumentation",
              "src": "11782:125:118",
              "text": " @dev Updates the address of the CollateralManager\n @param manager The new CollateralManager address*"
            },
            "functionSelector": "842a05d4",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 51548,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 51547,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "11977:9:118"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 30579,
                  "src": "11977:9:118"
                },
                "nodeType": "ModifierInvocation",
                "src": "11977:9:118"
              }
            ],
            "name": "setCollateralManager",
            "nameLocation": "11921:20:118",
            "overrides": {
              "id": 51546,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "11968:8:118"
            },
            "parameters": {
              "id": 51545,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51544,
                  "mutability": "mutable",
                  "name": "manager",
                  "nameLocation": "11950:7:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51561,
                  "src": "11942:15:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51543,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11942:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11941:17:118"
            },
            "returnParameters": {
              "id": 51549,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11987:0:118"
            },
            "scope": 52140,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51573,
            "nodeType": "FunctionDefinition",
            "src": "12279:111:118",
            "nodes": [],
            "body": {
              "id": 51572,
              "nodeType": "Block",
              "src": "12344:46:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51569,
                        "name": "PEER_ADMIN",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51052,
                        "src": "12372:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 51568,
                      "name": "getAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51175,
                      "src": "12361:10:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view returns (address)"
                      }
                    },
                    "id": 51570,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12361:22:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 51567,
                  "id": 51571,
                  "nodeType": "Return",
                  "src": "12354:29:118"
                }
              ]
            },
            "baseFunctions": [
              45562
            ],
            "documentation": {
              "id": 51562,
              "nodeType": "StructuredDocumentation",
              "src": "12098:176:118",
              "text": " @dev The functions below are getters/setters of addresses that are outside the context\n of the protocol hence the upgradable proxy pattern is not used*"
            },
            "functionSelector": "146b9ae3",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getPeerAdmin",
            "nameLocation": "12288:12:118",
            "overrides": {
              "id": 51564,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "12317:8:118"
            },
            "parameters": {
              "id": 51563,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12300:2:118"
            },
            "returnParameters": {
              "id": 51567,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51566,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 51573,
                  "src": "12335:7:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51565,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12335:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12334:9:118"
            },
            "scope": 52140,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51592,
            "nodeType": "FunctionDefinition",
            "src": "12396:150:118",
            "nodes": [],
            "body": {
              "id": 51591,
              "nodeType": "Block",
              "src": "12461:85:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 51585,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 51581,
                        "name": "_addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51049,
                        "src": "12471:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 51583,
                      "indexExpression": {
                        "id": 51582,
                        "name": "PEER_ADMIN",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51052,
                        "src": "12482:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "12471:22:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 51584,
                      "name": "admin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51575,
                      "src": "12496:5:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "12471:30:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 51586,
                  "nodeType": "ExpressionStatement",
                  "src": "12471:30:118"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 51588,
                        "name": "admin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51575,
                        "src": "12533:5:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 51587,
                      "name": "PeerAdminUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45355,
                      "src": "12516:16:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 51589,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12516:23:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51590,
                  "nodeType": "EmitStatement",
                  "src": "12511:28:118"
                }
              ]
            },
            "baseFunctions": [
              45567
            ],
            "functionSelector": "98875827",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 51579,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 51578,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "12451:9:118"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 30579,
                  "src": "12451:9:118"
                },
                "nodeType": "ModifierInvocation",
                "src": "12451:9:118"
              }
            ],
            "name": "setPeerAdmin",
            "nameLocation": "12405:12:118",
            "overrides": {
              "id": 51577,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "12442:8:118"
            },
            "parameters": {
              "id": 51576,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51575,
                  "mutability": "mutable",
                  "name": "admin",
                  "nameLocation": "12426:5:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51592,
                  "src": "12418:13:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51574,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12418:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12417:15:118"
            },
            "returnParameters": {
              "id": 51580,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12461:0:118"
            },
            "scope": 52140,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51604,
            "nodeType": "FunctionDefinition",
            "src": "12733:111:118",
            "nodes": [],
            "body": {
              "id": 51603,
              "nodeType": "Block",
              "src": "12798:46:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51600,
                        "name": "POOL_ADMIN",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51055,
                        "src": "12826:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 51599,
                      "name": "getAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51175,
                      "src": "12815:10:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view returns (address)"
                      }
                    },
                    "id": 51601,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12815:22:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 51598,
                  "id": 51602,
                  "nodeType": "Return",
                  "src": "12808:29:118"
                }
              ]
            },
            "baseFunctions": [
              45572
            ],
            "documentation": {
              "id": 51593,
              "nodeType": "StructuredDocumentation",
              "src": "12552:176:118",
              "text": " @dev The functions below are getters/setters of addresses that are outside the context\n of the protocol hence the upgradable proxy pattern is not used*"
            },
            "functionSelector": "aecda378",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getPoolAdmin",
            "nameLocation": "12742:12:118",
            "overrides": {
              "id": 51595,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "12771:8:118"
            },
            "parameters": {
              "id": 51594,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12754:2:118"
            },
            "returnParameters": {
              "id": 51598,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51597,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 51604,
                  "src": "12789:7:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51596,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12789:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12788:9:118"
            },
            "scope": 52140,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51623,
            "nodeType": "FunctionDefinition",
            "src": "12850:150:118",
            "nodes": [],
            "body": {
              "id": 51622,
              "nodeType": "Block",
              "src": "12915:85:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 51616,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 51612,
                        "name": "_addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51049,
                        "src": "12925:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 51614,
                      "indexExpression": {
                        "id": 51613,
                        "name": "POOL_ADMIN",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51055,
                        "src": "12936:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "12925:22:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 51615,
                      "name": "admin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51606,
                      "src": "12950:5:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "12925:30:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 51617,
                  "nodeType": "ExpressionStatement",
                  "src": "12925:30:118"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 51619,
                        "name": "admin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51606,
                        "src": "12987:5:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 51618,
                      "name": "PoolAdminUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45359,
                      "src": "12970:16:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 51620,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12970:23:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51621,
                  "nodeType": "EmitStatement",
                  "src": "12965:28:118"
                }
              ]
            },
            "baseFunctions": [
              45577
            ],
            "functionSelector": "283d62ad",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 51610,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 51609,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "12905:9:118"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 30579,
                  "src": "12905:9:118"
                },
                "nodeType": "ModifierInvocation",
                "src": "12905:9:118"
              }
            ],
            "name": "setPoolAdmin",
            "nameLocation": "12859:12:118",
            "overrides": {
              "id": 51608,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "12896:8:118"
            },
            "parameters": {
              "id": 51607,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51606,
                  "mutability": "mutable",
                  "name": "admin",
                  "nameLocation": "12880:5:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51623,
                  "src": "12872:13:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51605,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12872:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12871:15:118"
            },
            "returnParameters": {
              "id": 51611,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12915:0:118"
            },
            "scope": 52140,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51634,
            "nodeType": "FunctionDefinition",
            "src": "13006:121:118",
            "nodes": [],
            "body": {
              "id": 51633,
              "nodeType": "Block",
              "src": "13076:51:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51630,
                        "name": "EMERGENCY_ADMIN",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51058,
                        "src": "13104:15:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 51629,
                      "name": "getAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51175,
                      "src": "13093:10:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view returns (address)"
                      }
                    },
                    "id": 51631,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13093:27:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 51628,
                  "id": 51632,
                  "nodeType": "Return",
                  "src": "13086:34:118"
                }
              ]
            },
            "baseFunctions": [
              45582
            ],
            "functionSelector": "ddcaa9ea",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getEmergencyAdmin",
            "nameLocation": "13015:17:118",
            "overrides": {
              "id": 51625,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "13049:8:118"
            },
            "parameters": {
              "id": 51624,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13032:2:118"
            },
            "returnParameters": {
              "id": 51628,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51627,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 51634,
                  "src": "13067:7:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51626,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13067:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13066:9:118"
            },
            "scope": 52140,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51653,
            "nodeType": "FunctionDefinition",
            "src": "13133:192:118",
            "nodes": [],
            "body": {
              "id": 51652,
              "nodeType": "Block",
              "src": "13212:113:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 51646,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 51642,
                        "name": "_addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51049,
                        "src": "13222:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 51644,
                      "indexExpression": {
                        "id": 51643,
                        "name": "EMERGENCY_ADMIN",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51058,
                        "src": "13233:15:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "13222:27:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 51645,
                      "name": "emergencyAdmin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51636,
                      "src": "13252:14:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "13222:44:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 51647,
                  "nodeType": "ExpressionStatement",
                  "src": "13222:44:118"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 51649,
                        "name": "emergencyAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51636,
                        "src": "13303:14:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 51648,
                      "name": "EmergencyAdminUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45363,
                      "src": "13281:21:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 51650,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13281:37:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51651,
                  "nodeType": "EmitStatement",
                  "src": "13276:42:118"
                }
              ]
            },
            "baseFunctions": [
              45587
            ],
            "functionSelector": "35da3394",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 51640,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 51639,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "13202:9:118"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 30579,
                  "src": "13202:9:118"
                },
                "nodeType": "ModifierInvocation",
                "src": "13202:9:118"
              }
            ],
            "name": "setEmergencyAdmin",
            "nameLocation": "13142:17:118",
            "overrides": {
              "id": 51638,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "13193:8:118"
            },
            "parameters": {
              "id": 51637,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51636,
                  "mutability": "mutable",
                  "name": "emergencyAdmin",
                  "nameLocation": "13168:14:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51653,
                  "src": "13160:22:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51635,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13160:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13159:24:118"
            },
            "returnParameters": {
              "id": 51641,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13212:0:118"
            },
            "scope": 52140,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51664,
            "nodeType": "FunctionDefinition",
            "src": "13331:122:118",
            "nodes": [],
            "body": {
              "id": 51663,
              "nodeType": "Block",
              "src": "13401:52:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51660,
                        "name": "NFT_PRICE_ORACLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51091,
                        "src": "13429:16:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 51659,
                      "name": "getAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51175,
                      "src": "13418:10:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view returns (address)"
                      }
                    },
                    "id": 51661,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13418:28:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 51658,
                  "id": 51662,
                  "nodeType": "Return",
                  "src": "13411:35:118"
                }
              ]
            },
            "baseFunctions": [
              45592
            ],
            "functionSelector": "673adf43",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getNFTPriceOracle",
            "nameLocation": "13340:17:118",
            "overrides": {
              "id": 51655,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "13374:8:118"
            },
            "parameters": {
              "id": 51654,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13357:2:118"
            },
            "returnParameters": {
              "id": 51658,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51657,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 51664,
                  "src": "13392:7:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51656,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13392:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13391:9:118"
            },
            "scope": 52140,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51683,
            "nodeType": "FunctionDefinition",
            "src": "13459:193:118",
            "nodes": [],
            "body": {
              "id": 51682,
              "nodeType": "Block",
              "src": "13538:114:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 51676,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 51672,
                        "name": "_addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51049,
                        "src": "13548:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 51674,
                      "indexExpression": {
                        "id": 51673,
                        "name": "NFT_PRICE_ORACLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51091,
                        "src": "13559:16:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "13548:28:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 51675,
                      "name": "nftPriceOracle",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51666,
                      "src": "13579:14:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "13548:45:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 51677,
                  "nodeType": "ExpressionStatement",
                  "src": "13548:45:118"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 51679,
                        "name": "nftPriceOracle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51666,
                        "src": "13630:14:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 51678,
                      "name": "NFTPriceOracleUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45409,
                      "src": "13608:21:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 51680,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13608:37:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51681,
                  "nodeType": "EmitStatement",
                  "src": "13603:42:118"
                }
              ]
            },
            "baseFunctions": [
              45597
            ],
            "functionSelector": "1e34764c",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 51670,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 51669,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "13528:9:118"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 30579,
                  "src": "13528:9:118"
                },
                "nodeType": "ModifierInvocation",
                "src": "13528:9:118"
              }
            ],
            "name": "setNFTPriceOracle",
            "nameLocation": "13468:17:118",
            "overrides": {
              "id": 51668,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "13519:8:118"
            },
            "parameters": {
              "id": 51667,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51666,
                  "mutability": "mutable",
                  "name": "nftPriceOracle",
                  "nameLocation": "13494:14:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51683,
                  "src": "13486:22:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51665,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13486:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13485:24:118"
            },
            "returnParameters": {
              "id": 51671,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13538:0:118"
            },
            "scope": 52140,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51694,
            "nodeType": "FunctionDefinition",
            "src": "13658:130:118",
            "nodes": [],
            "body": {
              "id": 51693,
              "nodeType": "Block",
              "src": "13732:56:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51690,
                        "name": "LENDING_RATE_MANAGER",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51094,
                        "src": "13760:20:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 51689,
                      "name": "getAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51175,
                      "src": "13749:10:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view returns (address)"
                      }
                    },
                    "id": 51691,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13749:32:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 51688,
                  "id": 51692,
                  "nodeType": "Return",
                  "src": "13742:39:118"
                }
              ]
            },
            "baseFunctions": [
              45602
            ],
            "functionSelector": "617e0605",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getLendingRateManager",
            "nameLocation": "13667:21:118",
            "overrides": {
              "id": 51685,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "13705:8:118"
            },
            "parameters": {
              "id": 51684,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13688:2:118"
            },
            "returnParameters": {
              "id": 51688,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51687,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 51694,
                  "src": "13723:7:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51686,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13723:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13722:9:118"
            },
            "scope": 52140,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51713,
            "nodeType": "FunctionDefinition",
            "src": "13794:217:118",
            "nodes": [],
            "body": {
              "id": 51712,
              "nodeType": "Block",
              "src": "13881:130:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 51706,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 51702,
                        "name": "_addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51049,
                        "src": "13891:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 51704,
                      "indexExpression": {
                        "id": 51703,
                        "name": "LENDING_RATE_MANAGER",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51094,
                        "src": "13902:20:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "13891:32:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 51705,
                      "name": "lendingRateManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51696,
                      "src": "13926:18:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "13891:53:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 51707,
                  "nodeType": "ExpressionStatement",
                  "src": "13891:53:118"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 51709,
                        "name": "lendingRateManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51696,
                        "src": "13985:18:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 51708,
                      "name": "LendingRateManagerUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45413,
                      "src": "13959:25:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 51710,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13959:45:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51711,
                  "nodeType": "EmitStatement",
                  "src": "13954:50:118"
                }
              ]
            },
            "baseFunctions": [
              45607
            ],
            "functionSelector": "4d82964c",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 51700,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 51699,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "13871:9:118"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 30579,
                  "src": "13871:9:118"
                },
                "nodeType": "ModifierInvocation",
                "src": "13871:9:118"
              }
            ],
            "name": "setLendingRateManager",
            "nameLocation": "13803:21:118",
            "overrides": {
              "id": 51698,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "13862:8:118"
            },
            "parameters": {
              "id": 51697,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51696,
                  "mutability": "mutable",
                  "name": "lendingRateManager",
                  "nameLocation": "13833:18:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51713,
                  "src": "13825:26:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51695,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13825:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13824:28:118"
            },
            "returnParameters": {
              "id": 51701,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13881:0:118"
            },
            "scope": 52140,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51724,
            "nodeType": "FunctionDefinition",
            "src": "14017:124:118",
            "nodes": [],
            "body": {
              "id": 51723,
              "nodeType": "Block",
              "src": "14088:53:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51720,
                        "name": "PRICE_CONSUMER_V3",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51097,
                        "src": "14116:17:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 51719,
                      "name": "getAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51175,
                      "src": "14105:10:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view returns (address)"
                      }
                    },
                    "id": 51721,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14105:29:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 51718,
                  "id": 51722,
                  "nodeType": "Return",
                  "src": "14098:36:118"
                }
              ]
            },
            "baseFunctions": [
              45612
            ],
            "functionSelector": "00926047",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getPriceConsumerV3",
            "nameLocation": "14026:18:118",
            "overrides": {
              "id": 51715,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "14061:8:118"
            },
            "parameters": {
              "id": 51714,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14044:2:118"
            },
            "returnParameters": {
              "id": 51718,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51717,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 51724,
                  "src": "14079:7:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51716,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14079:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14078:9:118"
            },
            "scope": 52140,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51743,
            "nodeType": "FunctionDefinition",
            "src": "14147:197:118",
            "nodes": [],
            "body": {
              "id": 51742,
              "nodeType": "Block",
              "src": "14228:116:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 51736,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 51732,
                        "name": "_addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51049,
                        "src": "14238:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 51734,
                      "indexExpression": {
                        "id": 51733,
                        "name": "PRICE_CONSUMER_V3",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51097,
                        "src": "14249:17:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "14238:29:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 51735,
                      "name": "priceConsumerV3",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51726,
                      "src": "14270:15:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "14238:47:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 51737,
                  "nodeType": "ExpressionStatement",
                  "src": "14238:47:118"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 51739,
                        "name": "priceConsumerV3",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51726,
                        "src": "14321:15:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 51738,
                      "name": "PriceConsumerUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45367,
                      "src": "14300:20:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 51740,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14300:37:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51741,
                  "nodeType": "EmitStatement",
                  "src": "14295:42:118"
                }
              ]
            },
            "baseFunctions": [
              45617
            ],
            "functionSelector": "a01246e3",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 51730,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 51729,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "14218:9:118"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 30579,
                  "src": "14218:9:118"
                },
                "nodeType": "ModifierInvocation",
                "src": "14218:9:118"
              }
            ],
            "name": "setPriceConsumerV3",
            "nameLocation": "14156:18:118",
            "overrides": {
              "id": 51728,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "14209:8:118"
            },
            "parameters": {
              "id": 51727,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51726,
                  "mutability": "mutable",
                  "name": "priceConsumerV3",
                  "nameLocation": "14183:15:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51743,
                  "src": "14175:23:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51725,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14175:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14174:25:118"
            },
            "returnParameters": {
              "id": 51731,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14228:0:118"
            },
            "scope": 52140,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51754,
            "nodeType": "FunctionDefinition",
            "src": "14350:113:118",
            "nodes": [],
            "body": {
              "id": 51753,
              "nodeType": "Block",
              "src": "14416:47:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51750,
                        "name": "FLUID_TOKEN",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51100,
                        "src": "14444:11:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 51749,
                      "name": "getAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51175,
                      "src": "14433:10:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view returns (address)"
                      }
                    },
                    "id": 51751,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14433:23:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 51748,
                  "id": 51752,
                  "nodeType": "Return",
                  "src": "14426:30:118"
                }
              ]
            },
            "baseFunctions": [
              45622
            ],
            "functionSelector": "1a8b1fbc",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getFluidToken",
            "nameLocation": "14359:13:118",
            "overrides": {
              "id": 51745,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "14389:8:118"
            },
            "parameters": {
              "id": 51744,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14372:2:118"
            },
            "returnParameters": {
              "id": 51748,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51747,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 51754,
                  "src": "14407:7:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51746,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14407:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14406:9:118"
            },
            "scope": 52140,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51773,
            "nodeType": "FunctionDefinition",
            "src": "14469:168:118",
            "nodes": [],
            "body": {
              "id": 51772,
              "nodeType": "Block",
              "src": "14540:97:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 51766,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 51762,
                        "name": "_addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51049,
                        "src": "14550:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 51764,
                      "indexExpression": {
                        "id": 51763,
                        "name": "FLUID_TOKEN",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51100,
                        "src": "14561:11:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "14550:23:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 51765,
                      "name": "fluidToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51756,
                      "src": "14576:10:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "14550:36:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 51767,
                  "nodeType": "ExpressionStatement",
                  "src": "14550:36:118"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 51769,
                        "name": "fluidToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51756,
                        "src": "14619:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 51768,
                      "name": "FluidTokenUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45371,
                      "src": "14601:17:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 51770,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14601:29:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51771,
                  "nodeType": "EmitStatement",
                  "src": "14596:34:118"
                }
              ]
            },
            "baseFunctions": [
              45627
            ],
            "functionSelector": "74eb5a62",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 51760,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 51759,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "14530:9:118"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 30579,
                  "src": "14530:9:118"
                },
                "nodeType": "ModifierInvocation",
                "src": "14530:9:118"
              }
            ],
            "name": "setFluidToken",
            "nameLocation": "14478:13:118",
            "overrides": {
              "id": 51758,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "14521:8:118"
            },
            "parameters": {
              "id": 51757,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51756,
                  "mutability": "mutable",
                  "name": "fluidToken",
                  "nameLocation": "14500:10:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51773,
                  "src": "14492:18:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51755,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14492:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14491:20:118"
            },
            "returnParameters": {
              "id": 51761,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14540:0:118"
            },
            "scope": 52140,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51784,
            "nodeType": "FunctionDefinition",
            "src": "14646:142:118",
            "nodes": [],
            "body": {
              "id": 51783,
              "nodeType": "Block",
              "src": "14726:62:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51780,
                        "name": "POOL_INCENTIVES_CONTROLLER",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51103,
                        "src": "14754:26:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 51779,
                      "name": "getAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51175,
                      "src": "14743:10:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view returns (address)"
                      }
                    },
                    "id": 51781,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14743:38:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 51778,
                  "id": 51782,
                  "nodeType": "Return",
                  "src": "14736:45:118"
                }
              ]
            },
            "baseFunctions": [
              45632
            ],
            "functionSelector": "19ef9268",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getPoolIncentivesController",
            "nameLocation": "14655:27:118",
            "overrides": {
              "id": 51775,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "14699:8:118"
            },
            "parameters": {
              "id": 51774,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14682:2:118"
            },
            "returnParameters": {
              "id": 51778,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51777,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 51784,
                  "src": "14717:7:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51776,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14717:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14716:9:118"
            },
            "scope": 52140,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51803,
            "nodeType": "FunctionDefinition",
            "src": "14794:211:118",
            "nodes": [],
            "body": {
              "id": 51802,
              "nodeType": "Block",
              "src": "14879:126:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 51796,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 51792,
                        "name": "_addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51049,
                        "src": "14889:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 51794,
                      "indexExpression": {
                        "id": 51793,
                        "name": "POOL_INCENTIVES_CONTROLLER",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51103,
                        "src": "14900:26:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "14889:38:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 51795,
                      "name": "controller",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51786,
                      "src": "14930:10:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "14889:51:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 51797,
                  "nodeType": "ExpressionStatement",
                  "src": "14889:51:118"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 51799,
                        "name": "controller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51786,
                        "src": "14987:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 51798,
                      "name": "PoolIncentivesControllerUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45375,
                      "src": "14955:31:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 51800,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14955:43:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51801,
                  "nodeType": "EmitStatement",
                  "src": "14950:48:118"
                }
              ]
            },
            "baseFunctions": [
              45637
            ],
            "functionSelector": "6c6f33a5",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 51790,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 51789,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "14869:9:118"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 30579,
                  "src": "14869:9:118"
                },
                "nodeType": "ModifierInvocation",
                "src": "14869:9:118"
              }
            ],
            "name": "setPoolIncentivesController",
            "nameLocation": "14803:27:118",
            "overrides": {
              "id": 51788,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "14860:8:118"
            },
            "parameters": {
              "id": 51787,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51786,
                  "mutability": "mutable",
                  "name": "controller",
                  "nameLocation": "14839:10:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51803,
                  "src": "14831:18:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51785,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14831:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14830:20:118"
            },
            "returnParameters": {
              "id": 51791,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14879:0:118"
            },
            "scope": 52140,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51814,
            "nodeType": "FunctionDefinition",
            "src": "15011:142:118",
            "nodes": [],
            "body": {
              "id": 51813,
              "nodeType": "Block",
              "src": "15091:62:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51810,
                        "name": "PEER_INCENTIVES_CONTROLLER",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51106,
                        "src": "15119:26:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 51809,
                      "name": "getAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51175,
                      "src": "15108:10:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view returns (address)"
                      }
                    },
                    "id": 51811,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15108:38:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 51808,
                  "id": 51812,
                  "nodeType": "Return",
                  "src": "15101:45:118"
                }
              ]
            },
            "baseFunctions": [
              45642
            ],
            "functionSelector": "22e35383",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getPeerIncentivesController",
            "nameLocation": "15020:27:118",
            "overrides": {
              "id": 51805,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "15064:8:118"
            },
            "parameters": {
              "id": 51804,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15047:2:118"
            },
            "returnParameters": {
              "id": 51808,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51807,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 51814,
                  "src": "15082:7:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51806,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15082:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15081:9:118"
            },
            "scope": 52140,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51833,
            "nodeType": "FunctionDefinition",
            "src": "15159:211:118",
            "nodes": [],
            "body": {
              "id": 51832,
              "nodeType": "Block",
              "src": "15244:126:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 51826,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 51822,
                        "name": "_addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51049,
                        "src": "15254:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 51824,
                      "indexExpression": {
                        "id": 51823,
                        "name": "PEER_INCENTIVES_CONTROLLER",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51106,
                        "src": "15265:26:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "15254:38:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 51825,
                      "name": "controller",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51816,
                      "src": "15295:10:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "15254:51:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 51827,
                  "nodeType": "ExpressionStatement",
                  "src": "15254:51:118"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 51829,
                        "name": "controller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51816,
                        "src": "15352:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 51828,
                      "name": "PeerIncentivesControllerUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45379,
                      "src": "15320:31:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 51830,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15320:43:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51831,
                  "nodeType": "EmitStatement",
                  "src": "15315:48:118"
                }
              ]
            },
            "baseFunctions": [
              45647
            ],
            "functionSelector": "c13e754b",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 51820,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 51819,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "15234:9:118"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 30579,
                  "src": "15234:9:118"
                },
                "nodeType": "ModifierInvocation",
                "src": "15234:9:118"
              }
            ],
            "name": "setPeerIncentivesController",
            "nameLocation": "15168:27:118",
            "overrides": {
              "id": 51818,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "15225:8:118"
            },
            "parameters": {
              "id": 51817,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51816,
                  "mutability": "mutable",
                  "name": "controller",
                  "nameLocation": "15204:10:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51833,
                  "src": "15196:18:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51815,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15196:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15195:20:118"
            },
            "returnParameters": {
              "id": 51821,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15244:0:118"
            },
            "scope": 52140,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51844,
            "nodeType": "FunctionDefinition",
            "src": "15376:123:118",
            "nodes": [],
            "body": {
              "id": 51843,
              "nodeType": "Block",
              "src": "15447:52:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51840,
                        "name": "REFERRAL_MANAGER",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51109,
                        "src": "15475:16:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 51839,
                      "name": "getAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51175,
                      "src": "15464:10:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view returns (address)"
                      }
                    },
                    "id": 51841,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15464:28:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 51838,
                  "id": 51842,
                  "nodeType": "Return",
                  "src": "15457:35:118"
                }
              ]
            },
            "baseFunctions": [
              45652
            ],
            "functionSelector": "de3c6e04",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getReferralManager",
            "nameLocation": "15385:18:118",
            "overrides": {
              "id": 51835,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "15420:8:118"
            },
            "parameters": {
              "id": 51834,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15403:2:118"
            },
            "returnParameters": {
              "id": 51838,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51837,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 51844,
                  "src": "15438:7:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51836,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15438:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15437:9:118"
            },
            "scope": 52140,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51863,
            "nodeType": "FunctionDefinition",
            "src": "15505:198:118",
            "nodes": [],
            "body": {
              "id": 51862,
              "nodeType": "Block",
              "src": "15586:117:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 51856,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 51852,
                        "name": "_addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51049,
                        "src": "15596:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 51854,
                      "indexExpression": {
                        "id": 51853,
                        "name": "REFERRAL_MANAGER",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51109,
                        "src": "15607:16:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "15596:28:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 51855,
                      "name": "referralManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51846,
                      "src": "15627:15:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "15596:46:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 51857,
                  "nodeType": "ExpressionStatement",
                  "src": "15596:46:118"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 51859,
                        "name": "referralManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51846,
                        "src": "15680:15:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 51858,
                      "name": "ReferralManagerUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45383,
                      "src": "15657:22:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 51860,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15657:39:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51861,
                  "nodeType": "EmitStatement",
                  "src": "15652:44:118"
                }
              ]
            },
            "baseFunctions": [
              45657
            ],
            "functionSelector": "c5f3a4c4",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 51850,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 51849,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "15576:9:118"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 30579,
                  "src": "15576:9:118"
                },
                "nodeType": "ModifierInvocation",
                "src": "15576:9:118"
              }
            ],
            "name": "setReferralManager",
            "nameLocation": "15514:18:118",
            "overrides": {
              "id": 51848,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "15567:8:118"
            },
            "parameters": {
              "id": 51847,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51846,
                  "mutability": "mutable",
                  "name": "referralManager",
                  "nameLocation": "15541:15:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51863,
                  "src": "15533:23:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51845,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15533:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15532:25:118"
            },
            "returnParameters": {
              "id": 51851,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15586:0:118"
            },
            "scope": 52140,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51874,
            "nodeType": "FunctionDefinition",
            "src": "15709:108:118",
            "nodes": [],
            "body": {
              "id": 51873,
              "nodeType": "Block",
              "src": "15773:44:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51870,
                        "name": "TREASURY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51112,
                        "src": "15801:8:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 51869,
                      "name": "getAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51175,
                      "src": "15790:10:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view returns (address)"
                      }
                    },
                    "id": 51871,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15790:20:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 51868,
                  "id": 51872,
                  "nodeType": "Return",
                  "src": "15783:27:118"
                }
              ]
            },
            "baseFunctions": [
              45662
            ],
            "functionSelector": "3b19e84a",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getTreasury",
            "nameLocation": "15718:11:118",
            "overrides": {
              "id": 51865,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "15746:8:118"
            },
            "parameters": {
              "id": 51864,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15729:2:118"
            },
            "returnParameters": {
              "id": 51868,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51867,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 51874,
                  "src": "15764:7:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51866,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15764:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15763:9:118"
            },
            "scope": 52140,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51893,
            "nodeType": "FunctionDefinition",
            "src": "15823:155:118",
            "nodes": [],
            "body": {
              "id": 51892,
              "nodeType": "Block",
              "src": "15890:88:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 51886,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 51882,
                        "name": "_addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51049,
                        "src": "15900:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 51884,
                      "indexExpression": {
                        "id": 51883,
                        "name": "TREASURY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51112,
                        "src": "15911:8:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "15900:20:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 51885,
                      "name": "treasury",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51876,
                      "src": "15923:8:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "15900:31:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 51887,
                  "nodeType": "ExpressionStatement",
                  "src": "15900:31:118"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 51889,
                        "name": "treasury",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51876,
                        "src": "15962:8:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 51888,
                      "name": "TreasuryUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45387,
                      "src": "15946:15:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 51890,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15946:25:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51891,
                  "nodeType": "EmitStatement",
                  "src": "15941:30:118"
                }
              ]
            },
            "baseFunctions": [
              45667
            ],
            "functionSelector": "f0f44260",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 51880,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 51879,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "15880:9:118"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 30579,
                  "src": "15880:9:118"
                },
                "nodeType": "ModifierInvocation",
                "src": "15880:9:118"
              }
            ],
            "name": "setTreasury",
            "nameLocation": "15832:11:118",
            "overrides": {
              "id": 51878,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "15871:8:118"
            },
            "parameters": {
              "id": 51877,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51876,
                  "mutability": "mutable",
                  "name": "treasury",
                  "nameLocation": "15852:8:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51893,
                  "src": "15844:16:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51875,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15844:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15843:18:118"
            },
            "returnParameters": {
              "id": 51881,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15890:0:118"
            },
            "scope": 52140,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51904,
            "nodeType": "FunctionDefinition",
            "src": "15984:129:118",
            "nodes": [],
            "body": {
              "id": 51903,
              "nodeType": "Block",
              "src": "16058:55:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51900,
                        "name": "DELEGATION_REGISTRY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51127,
                        "src": "16086:19:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 51899,
                      "name": "getAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51175,
                      "src": "16075:10:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view returns (address)"
                      }
                    },
                    "id": 51901,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16075:31:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 51898,
                  "id": 51902,
                  "nodeType": "Return",
                  "src": "16068:38:118"
                }
              ]
            },
            "baseFunctions": [
              45672
            ],
            "functionSelector": "57d600a1",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getDelegationRegistry",
            "nameLocation": "15993:21:118",
            "overrides": {
              "id": 51895,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "16031:8:118"
            },
            "parameters": {
              "id": 51894,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16014:2:118"
            },
            "returnParameters": {
              "id": 51898,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51897,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 51904,
                  "src": "16049:7:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51896,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16049:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16048:9:118"
            },
            "scope": 52140,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51923,
            "nodeType": "FunctionDefinition",
            "src": "16119:216:118",
            "nodes": [],
            "body": {
              "id": 51922,
              "nodeType": "Block",
              "src": "16206:129:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 51916,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 51912,
                        "name": "_addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51049,
                        "src": "16216:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 51914,
                      "indexExpression": {
                        "id": 51913,
                        "name": "DELEGATION_REGISTRY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51127,
                        "src": "16227:19:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "16216:31:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 51915,
                      "name": "delegationRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51906,
                      "src": "16250:18:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "16216:52:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 51917,
                  "nodeType": "ExpressionStatement",
                  "src": "16216:52:118"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 51919,
                        "name": "delegationRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51906,
                        "src": "16309:18:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 51918,
                      "name": "DelegationRegistryUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45391,
                      "src": "16283:25:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 51920,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16283:45:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51921,
                  "nodeType": "EmitStatement",
                  "src": "16278:50:118"
                }
              ]
            },
            "baseFunctions": [
              45677
            ],
            "functionSelector": "73aa9e94",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 51910,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 51909,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "16196:9:118"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 30579,
                  "src": "16196:9:118"
                },
                "nodeType": "ModifierInvocation",
                "src": "16196:9:118"
              }
            ],
            "name": "setDelegationRegistry",
            "nameLocation": "16128:21:118",
            "overrides": {
              "id": 51908,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "16187:8:118"
            },
            "parameters": {
              "id": 51907,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51906,
                  "mutability": "mutable",
                  "name": "delegationRegistry",
                  "nameLocation": "16158:18:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51923,
                  "src": "16150:26:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51905,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16150:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16149:28:118"
            },
            "returnParameters": {
              "id": 51911,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16206:0:118"
            },
            "scope": 52140,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51934,
            "nodeType": "FunctionDefinition",
            "src": "16341:114:118",
            "nodes": [],
            "body": {
              "id": 51933,
              "nodeType": "Block",
              "src": "16407:48:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51930,
                        "name": "F_TOKEN_IMPL",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51115,
                        "src": "16435:12:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 51929,
                      "name": "getAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51175,
                      "src": "16424:10:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view returns (address)"
                      }
                    },
                    "id": 51931,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16424:24:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 51928,
                  "id": 51932,
                  "nodeType": "Return",
                  "src": "16417:31:118"
                }
              ]
            },
            "baseFunctions": [
              45682
            ],
            "functionSelector": "9fd192b8",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getFTokenImpl",
            "nameLocation": "16350:13:118",
            "overrides": {
              "id": 51925,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "16380:8:118"
            },
            "parameters": {
              "id": 51924,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16363:2:118"
            },
            "returnParameters": {
              "id": 51928,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51927,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 51934,
                  "src": "16398:7:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51926,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16398:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16397:9:118"
            },
            "scope": 52140,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51953,
            "nodeType": "FunctionDefinition",
            "src": "16461:169:118",
            "nodes": [],
            "body": {
              "id": 51952,
              "nodeType": "Block",
              "src": "16532:98:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 51946,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 51942,
                        "name": "_addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51049,
                        "src": "16542:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 51944,
                      "indexExpression": {
                        "id": 51943,
                        "name": "F_TOKEN_IMPL",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51115,
                        "src": "16553:12:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "16542:24:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 51945,
                      "name": "fTokenImpl",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51936,
                      "src": "16569:10:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "16542:37:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 51947,
                  "nodeType": "ExpressionStatement",
                  "src": "16542:37:118"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 51949,
                        "name": "fTokenImpl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51936,
                        "src": "16612:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 51948,
                      "name": "FTokenImplUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45401,
                      "src": "16594:17:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 51950,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16594:29:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51951,
                  "nodeType": "EmitStatement",
                  "src": "16589:34:118"
                }
              ]
            },
            "baseFunctions": [
              45687
            ],
            "functionSelector": "f66e398f",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 51940,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 51939,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "16522:9:118"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 30579,
                  "src": "16522:9:118"
                },
                "nodeType": "ModifierInvocation",
                "src": "16522:9:118"
              }
            ],
            "name": "setFTokenImpl",
            "nameLocation": "16470:13:118",
            "overrides": {
              "id": 51938,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "16513:8:118"
            },
            "parameters": {
              "id": 51937,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51936,
                  "mutability": "mutable",
                  "name": "fTokenImpl",
                  "nameLocation": "16492:10:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51953,
                  "src": "16484:18:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51935,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16484:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16483:20:118"
            },
            "returnParameters": {
              "id": 51941,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16532:0:118"
            },
            "scope": 52140,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51964,
            "nodeType": "FunctionDefinition",
            "src": "16636:120:118",
            "nodes": [],
            "body": {
              "id": 51963,
              "nodeType": "Block",
              "src": "16705:51:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51960,
                        "name": "DEBT_TOKEN_IMPL",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51118,
                        "src": "16733:15:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 51959,
                      "name": "getAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51175,
                      "src": "16722:10:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view returns (address)"
                      }
                    },
                    "id": 51961,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16722:27:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 51958,
                  "id": 51962,
                  "nodeType": "Return",
                  "src": "16715:34:118"
                }
              ]
            },
            "baseFunctions": [
              45692
            ],
            "functionSelector": "47d2c534",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getDebtTokenImpl",
            "nameLocation": "16645:16:118",
            "overrides": {
              "id": 51955,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "16678:8:118"
            },
            "parameters": {
              "id": 51954,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16661:2:118"
            },
            "returnParameters": {
              "id": 51958,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51957,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 51964,
                  "src": "16696:7:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51956,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16696:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16695:9:118"
            },
            "scope": 52140,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51983,
            "nodeType": "FunctionDefinition",
            "src": "16762:187:118",
            "nodes": [],
            "body": {
              "id": 51982,
              "nodeType": "Block",
              "src": "16839:110:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 51976,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 51972,
                        "name": "_addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51049,
                        "src": "16849:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 51974,
                      "indexExpression": {
                        "id": 51973,
                        "name": "DEBT_TOKEN_IMPL",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51118,
                        "src": "16860:15:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "16849:27:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 51975,
                      "name": "debtTokenImpl",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51966,
                      "src": "16879:13:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "16849:43:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 51977,
                  "nodeType": "ExpressionStatement",
                  "src": "16849:43:118"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 51979,
                        "name": "debtTokenImpl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51966,
                        "src": "16928:13:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 51978,
                      "name": "DebtTokenImplUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45405,
                      "src": "16907:20:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 51980,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16907:35:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 51981,
                  "nodeType": "EmitStatement",
                  "src": "16902:40:118"
                }
              ]
            },
            "baseFunctions": [
              45697
            ],
            "functionSelector": "135dc147",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 51970,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 51969,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "16829:9:118"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 30579,
                  "src": "16829:9:118"
                },
                "nodeType": "ModifierInvocation",
                "src": "16829:9:118"
              }
            ],
            "name": "setDebtTokenImpl",
            "nameLocation": "16771:16:118",
            "overrides": {
              "id": 51968,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "16820:8:118"
            },
            "parameters": {
              "id": 51967,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51966,
                  "mutability": "mutable",
                  "name": "debtTokenImpl",
                  "nameLocation": "16796:13:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 51983,
                  "src": "16788:21:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51965,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16788:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16787:23:118"
            },
            "returnParameters": {
              "id": 51971,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16839:0:118"
            },
            "scope": 52140,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 51994,
            "nodeType": "FunctionDefinition",
            "src": "16955:100:118",
            "nodes": [],
            "body": {
              "id": 51993,
              "nodeType": "Block",
              "src": "17015:40:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 51990,
                        "name": "WETH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51121,
                        "src": "17043:4:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 51989,
                      "name": "getAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51175,
                      "src": "17032:10:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view returns (address)"
                      }
                    },
                    "id": 51991,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17032:16:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 51988,
                  "id": 51992,
                  "nodeType": "Return",
                  "src": "17025:23:118"
                }
              ]
            },
            "baseFunctions": [
              45702
            ],
            "functionSelector": "cae5f11e",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getWETH",
            "nameLocation": "16964:7:118",
            "overrides": {
              "id": 51985,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "16988:8:118"
            },
            "parameters": {
              "id": 51984,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16971:2:118"
            },
            "returnParameters": {
              "id": 51988,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51987,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 51994,
                  "src": "17006:7:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51986,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17006:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17005:9:118"
            },
            "scope": 52140,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 52013,
            "nodeType": "FunctionDefinition",
            "src": "17061:131:118",
            "nodes": [],
            "body": {
              "id": 52012,
              "nodeType": "Block",
              "src": "17120:72:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 52006,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 52002,
                        "name": "_addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51049,
                        "src": "17130:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 52004,
                      "indexExpression": {
                        "id": 52003,
                        "name": "WETH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51121,
                        "src": "17141:4:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "17130:16:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 52005,
                      "name": "weth",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51996,
                      "src": "17149:4:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "17130:23:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 52007,
                  "nodeType": "ExpressionStatement",
                  "src": "17130:23:118"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 52009,
                        "name": "weth",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51996,
                        "src": "17180:4:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 52008,
                      "name": "WETHUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45417,
                      "src": "17168:11:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 52010,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17168:17:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 52011,
                  "nodeType": "EmitStatement",
                  "src": "17163:22:118"
                }
              ]
            },
            "baseFunctions": [
              45707
            ],
            "functionSelector": "5b769f3c",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 52000,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 51999,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "17110:9:118"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 30579,
                  "src": "17110:9:118"
                },
                "nodeType": "ModifierInvocation",
                "src": "17110:9:118"
              }
            ],
            "name": "setWETH",
            "nameLocation": "17070:7:118",
            "overrides": {
              "id": 51998,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "17101:8:118"
            },
            "parameters": {
              "id": 51997,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 51996,
                  "mutability": "mutable",
                  "name": "weth",
                  "nameLocation": "17086:4:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 52013,
                  "src": "17078:12:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 51995,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17078:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17077:14:118"
            },
            "returnParameters": {
              "id": 52001,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17120:0:118"
            },
            "scope": 52140,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 52024,
            "nodeType": "FunctionDefinition",
            "src": "17198:115:118",
            "nodes": [],
            "body": {
              "id": 52023,
              "nodeType": "Block",
              "src": "17265:48:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 52020,
                        "name": "WETH_GATEWAY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51124,
                        "src": "17293:12:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 52019,
                      "name": "getAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51175,
                      "src": "17282:10:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view returns (address)"
                      }
                    },
                    "id": 52021,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17282:24:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 52018,
                  "id": 52022,
                  "nodeType": "Return",
                  "src": "17275:31:118"
                }
              ]
            },
            "baseFunctions": [
              45712
            ],
            "functionSelector": "77532ed9",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getWETHGateway",
            "nameLocation": "17207:14:118",
            "overrides": {
              "id": 52015,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "17238:8:118"
            },
            "parameters": {
              "id": 52014,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17221:2:118"
            },
            "returnParameters": {
              "id": 52018,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 52017,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 52024,
                  "src": "17256:7:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 52016,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17256:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17255:9:118"
            },
            "scope": 52140,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 52043,
            "nodeType": "FunctionDefinition",
            "src": "17319:174:118",
            "nodes": [],
            "body": {
              "id": 52042,
              "nodeType": "Block",
              "src": "17392:101:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 52036,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 52032,
                        "name": "_addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51049,
                        "src": "17402:10:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 52034,
                      "indexExpression": {
                        "id": 52033,
                        "name": "WETH_GATEWAY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 51124,
                        "src": "17413:12:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "17402:24:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 52035,
                      "name": "wethGateway",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 52026,
                      "src": "17429:11:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "17402:38:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 52037,
                  "nodeType": "ExpressionStatement",
                  "src": "17402:38:118"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 52039,
                        "name": "wethGateway",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 52026,
                        "src": "17474:11:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 52038,
                      "name": "WETHGatewayUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45421,
                      "src": "17455:18:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 52040,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17455:31:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 52041,
                  "nodeType": "EmitStatement",
                  "src": "17450:36:118"
                }
              ]
            },
            "baseFunctions": [
              45717
            ],
            "functionSelector": "21da5837",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 52030,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 52029,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "17382:9:118"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 30579,
                  "src": "17382:9:118"
                },
                "nodeType": "ModifierInvocation",
                "src": "17382:9:118"
              }
            ],
            "name": "setWETHGateway",
            "nameLocation": "17328:14:118",
            "overrides": {
              "id": 52028,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "17373:8:118"
            },
            "parameters": {
              "id": 52027,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 52026,
                  "mutability": "mutable",
                  "name": "wethGateway",
                  "nameLocation": "17351:11:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 52043,
                  "src": "17343:19:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 52025,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17343:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17342:21:118"
            },
            "returnParameters": {
              "id": 52031,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17392:0:118"
            },
            "scope": 52140,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 52125,
            "nodeType": "FunctionDefinition",
            "src": "18097:723:118",
            "nodes": [],
            "body": {
              "id": 52124,
              "nodeType": "Block",
              "src": "18159:661:118",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    52052
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 52052,
                      "mutability": "mutable",
                      "name": "proxyAddress",
                      "nameLocation": "18185:12:118",
                      "nodeType": "VariableDeclaration",
                      "scope": 52124,
                      "src": "18169:28:118",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      },
                      "typeName": {
                        "id": 52051,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "18169:15:118",
                        "stateMutability": "payable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 52059,
                  "initialValue": {
                    "arguments": [
                      {
                        "baseExpression": {
                          "id": 52055,
                          "name": "_addresses",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 51049,
                          "src": "18208:10:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                            "typeString": "mapping(bytes32 => address)"
                          }
                        },
                        "id": 52057,
                        "indexExpression": {
                          "id": 52056,
                          "name": "id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 52046,
                          "src": "18219:2:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "18208:14:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 52054,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "18200:8:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_payable_$",
                        "typeString": "type(address payable)"
                      },
                      "typeName": {
                        "id": 52053,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "18200:8:118",
                        "stateMutability": "payable",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 52058,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18200:23:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18169:54:118"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 52065,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 52060,
                      "name": "proxyAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 52052,
                      "src": "18238:12:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 52063,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "18262:1:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 52062,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "18254:7:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 52061,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "18254:7:118",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 52064,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "18254:10:118",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "18238:26:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 52122,
                    "nodeType": "Block",
                    "src": "18644:170:118",
                    "statements": [
                      {
                        "assignments": [
                          52111
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 52111,
                            "mutability": "mutable",
                            "name": "proxy",
                            "nameLocation": "18718:5:118",
                            "nodeType": "VariableDeclaration",
                            "scope": 52122,
                            "src": "18696:27:118",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_FluidUpgradeableProxy_$63013",
                              "typeString": "contract FluidUpgradeableProxy"
                            },
                            "typeName": {
                              "id": 52110,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 52109,
                                "name": "FluidUpgradeableProxy",
                                "nameLocations": [
                                  "18696:21:118"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 63013,
                                "src": "18696:21:118"
                              },
                              "referencedDeclaration": 63013,
                              "src": "18696:21:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_FluidUpgradeableProxy_$63013",
                                "typeString": "contract FluidUpgradeableProxy"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 52115,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 52113,
                              "name": "proxyAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 52052,
                              "src": "18748:12:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 52112,
                            "name": "FluidUpgradeableProxy",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 63013,
                            "src": "18726:21:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_FluidUpgradeableProxy_$63013_$",
                              "typeString": "type(contract FluidUpgradeableProxy)"
                            }
                          },
                          "id": 52114,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18726:35:118",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_FluidUpgradeableProxy_$63013",
                            "typeString": "contract FluidUpgradeableProxy"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "18696:65:118"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 52119,
                              "name": "newAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 52048,
                              "src": "18792:10:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 52116,
                              "name": "proxy",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 52111,
                              "src": "18776:5:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_FluidUpgradeableProxy_$63013",
                                "typeString": "contract FluidUpgradeableProxy"
                              }
                            },
                            "id": 52118,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "18782:9:118",
                            "memberName": "upgradeTo",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 31326,
                            "src": "18776:15:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address) external"
                            }
                          },
                          "id": 52120,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18776:27:118",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 52121,
                        "nodeType": "ExpressionStatement",
                        "src": "18776:27:118"
                      }
                    ]
                  },
                  "id": 52123,
                  "nodeType": "IfStatement",
                  "src": "18234:580:118",
                  "trueBody": {
                    "id": 52108,
                    "nodeType": "Block",
                    "src": "18266:372:118",
                    "statements": [
                      {
                        "assignments": [
                          52067
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 52067,
                            "mutability": "mutable",
                            "name": "params",
                            "nameLocation": "18293:6:118",
                            "nodeType": "VariableDeclaration",
                            "scope": 52108,
                            "src": "18280:19:118",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 52066,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "18280:5:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 52076,
                        "initialValue": {
                          "arguments": [
                            {
                              "hexValue": "696e697469616c697a65286164647265737329",
                              "id": 52070,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "18326:21:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c4d66de8473e8f74cb05df264ee8262da16b56717ef1f05d73bfdcea3adc85e5",
                                "typeString": "literal_string \"initialize(address)\""
                              },
                              "value": "initialize(address)"
                            },
                            {
                              "arguments": [
                                {
                                  "id": 52073,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "18357:4:118",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_AddressProvider_$52140",
                                    "typeString": "contract AddressProvider"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_AddressProvider_$52140",
                                    "typeString": "contract AddressProvider"
                                  }
                                ],
                                "id": 52072,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "18349:7:118",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 52071,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "18349:7:118",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 52074,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "18349:13:118",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_c4d66de8473e8f74cb05df264ee8262da16b56717ef1f05d73bfdcea3adc85e5",
                                "typeString": "literal_string \"initialize(address)\""
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 52068,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "18302:3:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 52069,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "18306:19:118",
                            "memberName": "encodeWithSignature",
                            "nodeType": "MemberAccess",
                            "src": "18302:23:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (string memory) pure returns (bytes memory)"
                            }
                          },
                          "id": 52075,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18302:61:118",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "18280:83:118"
                      },
                      {
                        "assignments": [
                          52079
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 52079,
                            "mutability": "mutable",
                            "name": "proxy",
                            "nameLocation": "18462:5:118",
                            "nodeType": "VariableDeclaration",
                            "scope": 52108,
                            "src": "18440:27:118",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_FluidUpgradeableProxy_$63013",
                              "typeString": "contract FluidUpgradeableProxy"
                            },
                            "typeName": {
                              "id": 52078,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 52077,
                                "name": "FluidUpgradeableProxy",
                                "nameLocations": [
                                  "18440:21:118"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 63013,
                                "src": "18440:21:118"
                              },
                              "referencedDeclaration": 63013,
                              "src": "18440:21:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_FluidUpgradeableProxy_$63013",
                                "typeString": "contract FluidUpgradeableProxy"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 52090,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 52083,
                              "name": "newAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 52048,
                              "src": "18496:10:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 52086,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "18516:4:118",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_AddressProvider_$52140",
                                    "typeString": "contract AddressProvider"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_AddressProvider_$52140",
                                    "typeString": "contract AddressProvider"
                                  }
                                ],
                                "id": 52085,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "18508:7:118",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 52084,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "18508:7:118",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 52087,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "18508:13:118",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 52088,
                              "name": "params",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 52067,
                              "src": "18523:6:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 52082,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "18470:25:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_creation_payable$_t_address_$_t_address_$_t_bytes_memory_ptr_$returns$_t_contract$_FluidUpgradeableProxy_$63013_$",
                              "typeString": "function (address,address,bytes memory) payable returns (contract FluidUpgradeableProxy)"
                            },
                            "typeName": {
                              "id": 52081,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 52080,
                                "name": "FluidUpgradeableProxy",
                                "nameLocations": [
                                  "18474:21:118"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 63013,
                                "src": "18474:21:118"
                              },
                              "referencedDeclaration": 63013,
                              "src": "18474:21:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_FluidUpgradeableProxy_$63013",
                                "typeString": "contract FluidUpgradeableProxy"
                              }
                            }
                          },
                          "id": 52089,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18470:60:118",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_FluidUpgradeableProxy_$63013",
                            "typeString": "contract FluidUpgradeableProxy"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "18440:90:118"
                      },
                      {
                        "expression": {
                          "id": 52098,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 52091,
                              "name": "_addresses",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 51049,
                              "src": "18545:10:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                                "typeString": "mapping(bytes32 => address)"
                              }
                            },
                            "id": 52093,
                            "indexExpression": {
                              "id": 52092,
                              "name": "id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 52046,
                              "src": "18556:2:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "18545:14:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 52096,
                                "name": "proxy",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 52079,
                                "src": "18570:5:118",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_FluidUpgradeableProxy_$63013",
                                  "typeString": "contract FluidUpgradeableProxy"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_FluidUpgradeableProxy_$63013",
                                  "typeString": "contract FluidUpgradeableProxy"
                                }
                              ],
                              "id": 52095,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "18562:7:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 52094,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "18562:7:118",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 52097,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "18562:14:118",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "18545:31:118",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 52099,
                        "nodeType": "ExpressionStatement",
                        "src": "18545:31:118"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 52101,
                              "name": "id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 52046,
                              "src": "18608:2:118",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 52104,
                                  "name": "proxy",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 52079,
                                  "src": "18620:5:118",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_FluidUpgradeableProxy_$63013",
                                    "typeString": "contract FluidUpgradeableProxy"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_FluidUpgradeableProxy_$63013",
                                    "typeString": "contract FluidUpgradeableProxy"
                                  }
                                ],
                                "id": 52103,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "18612:7:118",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 52102,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "18612:7:118",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 52105,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "18612:14:118",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 52100,
                            "name": "ProxyCreated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 45397,
                            "src": "18595:12:118",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                              "typeString": "function (bytes32,address)"
                            }
                          },
                          "id": 52106,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18595:32:118",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 52107,
                        "nodeType": "EmitStatement",
                        "src": "18590:37:118"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 52044,
              "nodeType": "StructuredDocumentation",
              "src": "17499:593:118",
              "text": " @dev Internal function to update the implementation of a specific proxied component of the protocol\n - If there is no proxy registered in the given `id`, it creates the proxy setting `newAdress`\n   as implementation and calls the initialize() function on the proxy\n - If there is already a proxy registered, it just updates the implementation to `newAddress` and\n   calls the encoded method function via upgradeToAndCall() in the proxy\n @param id The id of the proxy to be updated\n @param newAddress The address of the new implementation*"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_updateImpl",
            "nameLocation": "18106:11:118",
            "parameters": {
              "id": 52049,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 52046,
                  "mutability": "mutable",
                  "name": "id",
                  "nameLocation": "18126:2:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 52125,
                  "src": "18118:10:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 52045,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "18118:7:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 52048,
                  "mutability": "mutable",
                  "name": "newAddress",
                  "nameLocation": "18138:10:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 52125,
                  "src": "18130:18:118",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 52047,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18130:7:118",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18117:32:118"
            },
            "returnParameters": {
              "id": 52050,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "18159:0:118"
            },
            "scope": 52140,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 52139,
            "nodeType": "FunctionDefinition",
            "src": "18826:128:118",
            "nodes": [],
            "body": {
              "id": 52138,
              "nodeType": "Block",
              "src": "18881:73:118",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 52132,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 52130,
                      "name": "_marketId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 51045,
                      "src": "18891:9:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 52131,
                      "name": "marketId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 52127,
                      "src": "18903:8:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "18891:20:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 52133,
                  "nodeType": "ExpressionStatement",
                  "src": "18891:20:118"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 52135,
                        "name": "marketId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 52127,
                        "src": "18938:8:118",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 52134,
                      "name": "MarketIdSet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45303,
                      "src": "18926:11:118",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory)"
                      }
                    },
                    "id": 52136,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18926:21:118",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 52137,
                  "nodeType": "EmitStatement",
                  "src": "18921:26:118"
                }
              ]
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setMarketId",
            "nameLocation": "18835:12:118",
            "parameters": {
              "id": 52128,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 52127,
                  "mutability": "mutable",
                  "name": "marketId",
                  "nameLocation": "18862:8:118",
                  "nodeType": "VariableDeclaration",
                  "scope": 52139,
                  "src": "18848:22:118",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 52126,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "18848:6:118",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18847:24:118"
            },
            "returnParameters": {
              "id": 52129,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "18881:0:118"
            },
            "scope": 52140,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 51040,
              "name": "Ownable",
              "nameLocations": [
                "698:7:118"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 30660,
              "src": "698:7:118"
            },
            "id": 51041,
            "nodeType": "InheritanceSpecifier",
            "src": "698:7:118"
          },
          {
            "baseName": {
              "id": 51042,
              "name": "IAddressProvider",
              "nameLocations": [
                "707:16:118"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 45718,
              "src": "707:16:118"
            },
            "id": 51043,
            "nodeType": "InheritanceSpecifier",
            "src": "707:16:118"
          }
        ],
        "canonicalName": "AddressProvider",
        "contractDependencies": [
          63013
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 51039,
          "nodeType": "StructuredDocumentation",
          "src": "363:306:118",
          "text": " @title AddressProvider contract\n @dev Main registry of addresses part of or connected to the protocol, including permissioned roles\n - Acting also as factory of proxies and admin of those, so with right to change its implementations\n - Owned by the FluidNFT Governance\n @author FluidNFT*"
        },
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          52140,
          45718,
          30660,
          35271
        ],
        "name": "AddressProvider",
        "nameLocation": "679:15:118",
        "scope": 52141,
        "usedErrors": []
      }
    ],
    "license": "AGPL-3.0"
  },
  "id": 118
}
```

</details>


# IAddressProvider

{% tabs %}
{% tab title="IAddressProvider.sol" %}

```solidity
// SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.16;

/**
 * @title AddressProvider contract
 * @dev Main registry of addresses part of or connected to the protocol, including permissioned roles
 * - Acting also as factory of proxies and admin of those, so with right to change its implementations
 * - Owned by the FluidNFT Governance
 * @author FluidNFT
 **/
interface IAddressProvider {
    event MarketIdSet(string newMarketId);
    event AddressSet(bytes32 id, address indexed newAddress, bool hasProxy);
    event ExecutionDelegateUpdated(address indexed newAddress);
    event ExecutionManagerUpdated(address indexed newAddress);
    event LendingUpdated(address indexed newAddress);
    event PromissoryNoteUpdated(address indexed newAddress);
    event PromissoryNoteBundleUpdated(address indexed newAddress);
    event ObligationReceiptUpdated(address indexed newAddress);
    event ObligationReceiptBundleUpdated(address indexed newAddress);
    event LendingPoolUpdated(address indexed newAddress);
    event ConfiguratorUpdated(address indexed newAddress);
    event CollateralManagerUpdated(address indexed newAddress);
    event PeerAdminUpdated(address indexed newAddress);
    event PoolAdminUpdated(address indexed newAddress);
    event EmergencyAdminUpdated(address indexed newAddress);
    event PriceConsumerUpdated(address indexed newAddress);
    event FluidTokenUpdated(address indexed newAddress);
    event PoolIncentivesControllerUpdated(address indexed newAddress);
    event PeerIncentivesControllerUpdated(address indexed newAddress);
    event ReferralManagerUpdated(address indexed newAddress);
    event TreasuryUpdated(address indexed newAddress);
    event DelegationRegistryUpdated(address indexed newAddress);
    event ProxyCreated(bytes32 id, address indexed newAddress);
    event FTokenImplUpdated(address indexed newAddress);
    event DebtTokenImplUpdated(address indexed newAddress);
    event NFTPriceOracleUpdated(address indexed newAddress);
    event LendingRateManagerUpdated(address indexed newAddress);
    event WETHUpdated(address indexed newAddress);
    event WETHGatewayUpdated(address indexed newAddress);

    function getMarketId() external view returns (string memory);

    function setMarketId(string calldata marketId) external;

    function getAddress(bytes32 id) external view returns (address);

    function setAddress(bytes32 id, address newAddress) external;

    function setAddressAsProxy(
        bytes32 id,
        address impl
    ) external;

    function getExecutionDelegate() external view returns (address);

    function setExecutionDelegate(address executionDelegate) external;

    function getExecutionManager() external view returns (address);

    function setExecutionManager(address executionManager) external;

    function getLending() external view returns (address);

    function setLending(address lending) external;

    function getPromissoryNote() external view returns (address);

    function setPromissoryNote(address promissoryNote) external;

    function getPromissoryNoteBundle() external view returns (address);

    function setPromissoryNoteBundle(address promissoryNote) external;

    function getObligationReceipt() external view returns (address);

    function setObligationReceipt(address obligationReceipt) external;

    function getObligationReceiptBundle() external view returns (address);

    function setObligationReceiptBundle(address obligationReceipt) external;

    function getLendingPool() external view returns (address);

    function setLendingPool(address pool) external;

    function getConfigurator() external view returns (address);

    function setConfigurator(address configurator) external;

    function setConfiguratorImpl(address configurator) external;

    function getCollateralManager() external view returns (address);

    function setCollateralManager(address collateralManager) external;

    function getPeerAdmin() external view returns (address);

    function setPeerAdmin(address admin) external;

    function getPoolAdmin() external view returns (address);

    function setPoolAdmin(address admin) external;

    function getEmergencyAdmin() external view returns (address);

    function setEmergencyAdmin(address admin) external;

    function getNFTPriceOracle() external view returns (address);

    function setNFTPriceOracle(address nftPriceOracle) external;

    function getLendingRateManager() external view returns (address);

    function setLendingRateManager(address lendingRateManager) external;

    function getPriceConsumerV3() external view returns (address);

    function setPriceConsumerV3(address priceConsumerV3) external;

    function getFluidToken() external view returns (address);

    function setFluidToken(address fluidToken) external;

    function getPoolIncentivesController() external view returns (address);

    function setPoolIncentivesController(address controller) external;

    function getPeerIncentivesController() external view returns (address);

    function setPeerIncentivesController(address controller) external;

    function getReferralManager() external view returns (address);

    function setReferralManager(address referralManager) external;

    function getTreasury() external view returns (address);

    function setTreasury(address treasury) external;

    function getDelegationRegistry() external view returns (address);

    function setDelegationRegistry(address delegationRegistry) external;

    function getFTokenImpl() external view returns (address);

    function setFTokenImpl(address fTokenImpl) external;

    function getDebtTokenImpl() external view returns (address);

    function setDebtTokenImpl(address debtTokenImpl) external;

    function getWETH() external view returns (address);

    function setWETH(address weth) external;

    function getWETHGateway() external view returns (address);

    function setWETHGateway(address weth) external;
}
```

{% endtab %}
{% endtabs %}


# Address Provider Registry

A register of the active [`AddressProvider`](/technical-resources/developers/contract-reference/address-provider) contracts, covering all markets. This contract is immutable and the address will never change. Also see Deployed Contracts section.

## Methods

### getAddressProvidersList()

**`function getAddressProvidersList()`**

Returns the list of active [`AddressProvider`](/technical-resources/developers/contract-reference/address-provider) contracts.

### getAddressProviderIdByAddress()

**`function getAddressProviderIdByAddress(address addressProvider)`**

Returns the ID of an [`AddressProvider`](/technical-resources/developers/contract-reference/address-provider)

| Parameter Name | Type    | Description                     |
| -------------- | ------- | ------------------------------- |
| `provider`     | address | address of the address provider |

## ABI

<details>

<summary>Address Provider Registry ABI</summary>

```
{
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "newAddress",
          "type": "address"
        }
      ],
      "name": "AddressProviderRegistered",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "newAddress",
          "type": "address"
        }
      ],
      "name": "AddressProviderUnregistered",
      "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"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "addressProvider",
          "type": "address"
        }
      ],
      "name": "getAddressProviderIdByAddress",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getAddressProvidersList",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "provider",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "registerAddressProvider",
      "outputs": [],
      "stateMutability": "nonpayable",
      "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": "address",
          "name": "provider",
          "type": "address"
        }
      ],
      "name": "unregisterAddressProvider",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6107618061007e6000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80639219d4f51161005b5780639219d4f5146100bf578063c4ea1e0d146100d2578063d1bb2da1146100e7578063f2fde38b1461011e57600080fd5b8063389140b814610082578063715018a6146100975780638da5cb5b1461009f575b600080fd5b6100956100903660046105f1565b610131565b005b6100956101ea565b6000546040516001600160a01b0390911681526020015b60405180910390f35b6100956100cd366004610613565b6101fe565b6100da61029b565b6040516100b6919061063d565b6101106100f53660046105f1565b6001600160a01b031660009081526001602052604090205490565b6040519081526020016100b6565b61009561012c3660046105f1565b610402565b61013961047b565b600060016000836001600160a01b03166001600160a01b0316815260200190815260200160002054116040518060400160405280600381526020016203736360ec1b815250906101a55760405162461bcd60e51b815260040161019c919061068a565b60405180910390fd5b506001600160a01b038116600081815260016020526040808220829055517fb0f75fa307bb6abb1589a2df17cb71944f67ecdd1a94630ae40485c3d135e9f29190a250565b6101f261047b565b6101fc60006104d5565b565b61020661047b565b60408051808201909152600381526237363160e81b60208201528161023e5760405162461bcd60e51b815260040161019c919061068a565b506001600160a01b038216600090815260016020526040902081905561026382610525565b6040516001600160a01b038316907f626e6d32e5330ca33125085e9eda609daa828213da74cb83cfb1139a77dc84c690600090a25050565b6060600060028054806020026020016040519081016040528092919081815260200182805480156102f557602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116102d7575b5050505050905060008151905060008167ffffffffffffffff81111561031d5761031d6106d8565b604051908082528060200260200182016040528015610346578160200160208202803683370190505b50905060005b828110156103fa5760006001600086848151811061036c5761036c6106ee565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205411156103e8578381815181106103ad576103ad6106ee565b60200260200101518282815181106103c7576103c76106ee565b60200260200101906001600160a01b031690816001600160a01b0316815250505b806103f281610704565b91505061034c565b509392505050565b61040a61047b565b6001600160a01b03811661046f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161019c565b610478816104d5565b50565b6000546001600160a01b031633146101fc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161019c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60025460005b8181101561058157826001600160a01b031660028281548110610550576105506106ee565b6000918252602090912001546001600160a01b03160361056f57505050565b8061057981610704565b91505061052b565b5050600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b03811681146105ec57600080fd5b919050565b60006020828403121561060357600080fd5b61060c826105d5565b9392505050565b6000806040838503121561062657600080fd5b61062f836105d5565b946020939093013593505050565b6020808252825182820181905260009190848201906040850190845b8181101561067e5783516001600160a01b031683529284019291840191600101610659565b50909695505050505050565b600060208083528351808285015260005b818110156106b75785810183015185820160400152820161069b565b506000604082860101526040601f19601f8301168501019250505092915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006001820161072457634e487b7160e01b600052601160045260246000fd5b506001019056fea26469706673582212203281ced7d9c041d562de76e13f26135f9777f03bee78f08d46b6ac9bf1e31ffe64736f6c63430008100033",
    "sourceMap": "667:2483:119:-:0;;;;;;;;;;;;-1:-1:-1;936:32:41;719:10:65;936:18:41;:32::i;:::-;667:2483:119;;2433:187:41;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:41;;;-1:-1:-1;;;;;;2541:17:41;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;667:2483:119:-;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c80639219d4f51161005b5780639219d4f5146100bf578063c4ea1e0d146100d2578063d1bb2da1146100e7578063f2fde38b1461011e57600080fd5b8063389140b814610082578063715018a6146100975780638da5cb5b1461009f575b600080fd5b6100956100903660046105f1565b610131565b005b6100956101ea565b6000546040516001600160a01b0390911681526020015b60405180910390f35b6100956100cd366004610613565b6101fe565b6100da61029b565b6040516100b6919061063d565b6101106100f53660046105f1565b6001600160a01b031660009081526001602052604090205490565b6040519081526020016100b6565b61009561012c3660046105f1565b610402565b61013961047b565b600060016000836001600160a01b03166001600160a01b0316815260200190815260200160002054116040518060400160405280600381526020016203736360ec1b815250906101a55760405162461bcd60e51b815260040161019c919061068a565b60405180910390fd5b506001600160a01b038116600081815260016020526040808220829055517fb0f75fa307bb6abb1589a2df17cb71944f67ecdd1a94630ae40485c3d135e9f29190a250565b6101f261047b565b6101fc60006104d5565b565b61020661047b565b60408051808201909152600381526237363160e81b60208201528161023e5760405162461bcd60e51b815260040161019c919061068a565b506001600160a01b038216600090815260016020526040902081905561026382610525565b6040516001600160a01b038316907f626e6d32e5330ca33125085e9eda609daa828213da74cb83cfb1139a77dc84c690600090a25050565b6060600060028054806020026020016040519081016040528092919081815260200182805480156102f557602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116102d7575b5050505050905060008151905060008167ffffffffffffffff81111561031d5761031d6106d8565b604051908082528060200260200182016040528015610346578160200160208202803683370190505b50905060005b828110156103fa5760006001600086848151811061036c5761036c6106ee565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205411156103e8578381815181106103ad576103ad6106ee565b60200260200101518282815181106103c7576103c76106ee565b60200260200101906001600160a01b031690816001600160a01b0316815250505b806103f281610704565b91505061034c565b509392505050565b61040a61047b565b6001600160a01b03811661046f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161019c565b610478816104d5565b50565b6000546001600160a01b031633146101fc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161019c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60025460005b8181101561058157826001600160a01b031660028281548110610550576105506106ee565b6000918252602090912001546001600160a01b03160361056f57505050565b8061057981610704565b91505061052b565b5050600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b03811681146105ec57600080fd5b919050565b60006020828403121561060357600080fd5b61060c826105d5565b9392505050565b6000806040838503121561062657600080fd5b61062f836105d5565b946020939093013593505050565b6020808252825182820181905260009190848201906040850190845b8181101561067e5783516001600160a01b031683529284019291840191600101610659565b50909695505050505050565b600060208083528351808285015260005b818110156106b75785810183015185820160400152820161069b565b506000604082860101526040601f19601f8301168501019250505092915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006001820161072457634e487b7160e01b600052601160045260246000fd5b506001019056fea26469706673582212203281ced7d9c041d562de76e13f26135f9777f03bee78f08d46b6ac9bf1e31ffe64736f6c63430008100033",
    "sourceMap": "667:2483:119:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2224:269;;;;;;:::i;:::-;;:::i;:::-;;1831:101:41;;;:::i;1201:85::-;1247:7;1273:6;1201:85;;-1:-1:-1;;;;;1273:6:41;;;529:51:176;;517:2;502:18;1201:85:41;;;;;;;;1760:305:119;;;;;;:::i;:::-;;:::i;1017:523::-;;;:::i;:::-;;;;;;;:::i;2643:163::-;;;;;;:::i;:::-;-1:-1:-1;;;;;2765:34:119;2739:7;2765:34;;;:17;:34;;;;;;;2643:163;;;;1659:25:176;;;1647:2;1632:18;2643:163:119;1513:177:176;2081:198:41;;;;;;:::i;:::-;;:::i;2224:269:119:-;1094:13:41;:11;:13::i;:::-;2353:1:119::1;2323:17;:27;2341:8;-1:-1:-1::0;;;;;2323:27:119::1;-1:-1:-1::0;;;;;2323:27:119::1;;;;;;;;;;;;;:31;2356:36;;;;;;;;;;;;;-1:-1:-1::0;;;2356:36:119::1;;::::0;2315:78:::1;;;;;-1:-1:-1::0;;;2315:78:119::1;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1::0;;;;;;2403:27:119;::::1;2433:1;2403:27:::0;;;:17:::1;:27;::::0;;;;;:31;;;2449:37;::::1;::::0;2433:1;2449:37:::1;2224:269:::0;:::o;1831:101:41:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;1760:305:119:-;1094:13:41;:11;:13::i;:::-;1878:40:119::1;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;1878:40:119::1;::::0;::::1;::::0;1869:7;1861:58:::1;;;;-1:-1:-1::0;;;1861:58:119::1;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;1930:27:119;::::1;;::::0;;;:17:::1;:27;::::0;;;;:32;;;1972:36:::1;1948:8:::0;1972:26:::1;:36::i;:::-;2023:35;::::0;-1:-1:-1;;;;;2023:35:119;::::1;::::0;::::1;::::0;;;::::1;1760:305:::0;;:::o;1017:523::-;1084:16;1112:37;1152:21;1112:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1112:61:119;;;;;;;;;;;;;;;;;;;;;;;1184:17;1204:20;:27;1184:47;;1242:32;1291:9;1277:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1277:24:119;;1242:59;;1317:9;1312:189;1336:9;1332:1;:13;1312:189;;;1415:1;1370:17;:42;1388:20;1409:1;1388:23;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;1370:42:119;-1:-1:-1;;;;;1370:42:119;;;;;;;;;;;;;:46;1366:125;;;1453:20;1474:1;1453:23;;;;;;;;:::i;:::-;;;;;;;1432:15;1448:1;1432:18;;;;;;;;:::i;:::-;;;;;;:44;-1:-1:-1;;;;;1432:44:119;;;-1:-1:-1;;;;;1432:44:119;;;;;1366:125;1347:3;;;;:::i;:::-;;;;1312:189;;;-1:-1:-1;1518:15:119;1017:523;-1:-1:-1;;;1017:523:119:o;2081:198:41:-;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2169:22:41;::::1;2161:73;;;::::0;-1:-1:-1;;;2161:73:41;;2951:2:176;2161:73:41::1;::::0;::::1;2933:21:176::0;2990:2;2970:18;;;2963:30;3029:34;3009:18;;;3002:62;-1:-1:-1;;;3080:18:176;;;3073:36;3126:19;;2161:73:41::1;2749:402:176::0;2161:73:41::1;2244:28;2263:8;2244:18;:28::i;:::-;2081:198:::0;:::o;1359:130::-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:41;719:10:65;1422:23:41;1414:68;;;;-1:-1:-1;;;1414:68:41;;3358:2:176;1414:68:41;;;3340:21:176;;;3377:18;;;3370:30;3436:34;3416:18;;;3409:62;3488:18;;1414:68:41;3156:356:176;2433:187:41;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:41;;;-1:-1:-1;;;;;;2541:17:41;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;2812:336:119:-;2910:21;:28;2885:22;2949:146;2973:14;2969:1;:18;2949:146;;;3040:8;-1:-1:-1;;;;;3012:36:119;:21;3034:1;3012:24;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;3012:24:119;:36;3008:77;;3064:7;;2812:336;:::o;3008:77::-;2989:3;;;;:::i;:::-;;;;2949:146;;;-1:-1:-1;;3105:21:119;:36;;;;;;;-1:-1:-1;3105:36:119;;;;;;;;-1:-1:-1;;;;;;3105:36:119;-1:-1:-1;;;;;3105:36:119;;;;;;;;;;2812:336::o;14:173:176:-;82:20;;-1:-1:-1;;;;;131:31:176;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;:::-;333:39;192:186;-1:-1:-1;;;192:186:176:o;591:254::-;659:6;667;720:2;708:9;699:7;695:23;691:32;688:52;;;736:1;733;726:12;688:52;759:29;778:9;759:29;:::i;:::-;749:39;835:2;820:18;;;;807:32;;-1:-1:-1;;;591:254:176:o;850:658::-;1021:2;1073:21;;;1143:13;;1046:18;;;1165:22;;;992:4;;1021:2;1244:15;;;;1218:2;1203:18;;;992:4;1287:195;1301:6;1298:1;1295:13;1287:195;;;1366:13;;-1:-1:-1;;;;;1362:39:176;1350:52;;1457:15;;;;1422:12;;;;1398:1;1316:9;1287:195;;;-1:-1:-1;1499:3:176;;850:658;-1:-1:-1;;;;;;850:658:176:o;1695:548::-;1807:4;1836:2;1865;1854:9;1847:21;1897:6;1891:13;1940:6;1935:2;1924:9;1920:18;1913:34;1965:1;1975:140;1989:6;1986:1;1983:13;1975:140;;;2084:14;;;2080:23;;2074:30;2050:17;;;2069:2;2046:26;2039:66;2004:10;;1975:140;;;1979:3;2164:1;2159:2;2150:6;2139:9;2135:22;2131:31;2124:42;2234:2;2227;2223:7;2218:2;2210:6;2206:15;2202:29;2191:9;2187:45;2183:54;2175:62;;;;1695:548;;;;:::o;2248:127::-;2309:10;2304:3;2300:20;2297:1;2290:31;2340:4;2337:1;2330:15;2364:4;2361:1;2354:15;2380:127;2441:10;2436:3;2432:20;2429:1;2422:31;2472:4;2469:1;2462:15;2496:4;2493:1;2486:15;2512:232;2551:3;2572:17;;;2569:140;;2631:10;2626:3;2622:20;2619:1;2612:31;2666:4;2663:1;2656:15;2694:4;2691:1;2684:15;2569:140;-1:-1:-1;2736:1:176;2725:13;;2512:232::o",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "getAddressProviderIdByAddress(address)": "d1bb2da1",
    "getAddressProvidersList()": "c4ea1e0d",
    "owner()": "8da5cb5b",
    "registerAddressProvider(address,uint256)": "9219d4f5",
    "renounceOwnership()": "715018a6",
    "transferOwnership(address)": "f2fde38b",
    "unregisterAddressProvider(address)": "389140b8"
  },
  "rawMetadata": "{\"compiler\":{\"version\":\"0.8.16+commit.07a7930e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"AddressProviderRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"AddressProviderUnregistered\",\"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\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addressProvider\",\"type\":\"address\"}],\"name\":\"getAddressProviderIdByAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAddressProvidersList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"registerAddressProvider\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"address\",\"name\":\"provider\",\"type\":\"address\"}],\"name\":\"unregisterAddressProvider\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"FluidNFT*\",\"details\":\"Main registry of AddressProvider of multiple FluidNFT protocol's markets - Used for indexing purposes of FluidNFT protocol's markets - The id assigned to a AddressProvider refers to the market it is connected with,   for example with `1` for the FluidNFT main market and `2` for the next created\",\"kind\":\"dev\",\"methods\":{\"getAddressProviderIdByAddress(address)\":{\"details\":\"Returns the id on a registered AddressProvider\",\"returns\":{\"_0\":\"The id or 0 if the AddressProvider is not registered*\"}},\"getAddressProvidersList()\":{\"details\":\"Returns the list of registered addresses provider\",\"returns\":{\"_0\":\"The list of addresses provider, potentially containing address(0) elements*\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"registerAddressProvider(address,uint256)\":{\"details\":\"Registers an addresses provider\",\"params\":{\"id\":\"The id for the new AddressProvider, referring to the market it belongs to*\",\"provider\":\"The address of the new AddressProvider\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"unregisterAddressProvider(address)\":{\"details\":\"Removes a AddressProvider from the list of registered addresses provider\",\"params\":{\"provider\":\"The AddressProvider address*\"}}},\"title\":\"AddressProviderRegistry contract\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/protocol/governance/AddressProviderRegistry.sol\":\"AddressProviderRegistry\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@chainlink/=lib/chainlink/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":chainlink/=lib/chainlink/integration-tests/contracts/ethereum/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"src/interfaces/IAddressProviderRegistry.sol\":{\"keccak256\":\"0x1a03fec8a99776cc581fe311dad785c49221005239c255e5dbdc210ea689d51f\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://5fb0350cfba70aae0c48c1840e2dde26253718f411948c331d67169db985fb67\",\"dweb:/ipfs/QmehHRWv9zXtVznwUrrjRWDM8PJrYv1QX8espfs7NkCdNe\"]},\"src/protocol/governance/AddressProviderRegistry.sol\":{\"keccak256\":\"0x1e60f8cfe7191c0ecb340dc6cb63f9d738cbec1937a44550b7e2848254d1e6a4\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://b3526844583c7e34eadb45d16a9182085b2ea056e112a87fd95ea1b36fcb94cb\",\"dweb:/ipfs/QmSQ3KQVNLf7vqcvBvuVHvvcJdJ7iQwTmtYFFongRztb4f\"]},\"src/protocol/libraries/helpers/Errors.sol\":{\"keccak256\":\"0x490e76871922e89a13ba0bb88977be18c143fa9d0cd9afb033744a3d81479c52\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://1c409d4d1e1689d8d8f3c3e361198d20f3b6476608c5316d8e2d91f52373e8e3\",\"dweb:/ipfs/QmRZaYpxqjmBpbxb51KqswKYPSeCsU3ejbmk5E3MrMxJaM\"]}},\"version\":1}",
  "metadata": {
    "compiler": {
      "version": "0.8.16+commit.07a7930e"
    },
    "language": "Solidity",
    "output": {
      "abi": [
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "newAddress",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "AddressProviderRegistered",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "newAddress",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "AddressProviderUnregistered",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "previousOwner",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "newOwner",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "OwnershipTransferred",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "addressProvider",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getAddressProviderIdByAddress",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getAddressProvidersList",
          "outputs": [
            {
              "internalType": "address[]",
              "name": "",
              "type": "address[]"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "owner",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "provider",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "registerAddressProvider"
        },
        {
          "inputs": [],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "renounceOwnership"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "newOwner",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "transferOwnership"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "provider",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "unregisterAddressProvider"
        }
      ],
      "devdoc": {
        "kind": "dev",
        "methods": {
          "getAddressProviderIdByAddress(address)": {
            "details": "Returns the id on a registered AddressProvider",
            "returns": {
              "_0": "The id or 0 if the AddressProvider is not registered*"
            }
          },
          "getAddressProvidersList()": {
            "details": "Returns the list of registered addresses provider",
            "returns": {
              "_0": "The list of addresses provider, potentially containing address(0) elements*"
            }
          },
          "owner()": {
            "details": "Returns the address of the current owner."
          },
          "registerAddressProvider(address,uint256)": {
            "details": "Registers an addresses provider",
            "params": {
              "id": "The id for the new AddressProvider, referring to the market it belongs to*",
              "provider": "The address of the new AddressProvider"
            }
          },
          "renounceOwnership()": {
            "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
          },
          "transferOwnership(address)": {
            "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
          },
          "unregisterAddressProvider(address)": {
            "details": "Removes a AddressProvider from the list of registered addresses provider",
            "params": {
              "provider": "The AddressProvider address*"
            }
          }
        },
        "version": 1
      },
      "userdoc": {
        "kind": "user",
        "methods": {},
        "version": 1
      }
    },
    "settings": {
      "remappings": [
        ":@chainlink/=lib/chainlink/",
        ":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
        ":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
        ":chainlink/=lib/chainlink/integration-tests/contracts/ethereum/src/",
        ":ds-test/=lib/forge-std/lib/ds-test/src/",
        ":forge-std/=lib/forge-std/src/"
      ],
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "metadata": {
        "bytecodeHash": "ipfs"
      },
      "compilationTarget": {
        "src/protocol/governance/AddressProviderRegistry.sol": "AddressProviderRegistry"
      },
      "libraries": {}
    },
    "sources": {
      "lib/openzeppelin-contracts/contracts/access/Ownable.sol": {
        "keccak256": "0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673",
        "urls": [
          "bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2",
          "dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/Context.sol": {
        "keccak256": "0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7",
        "urls": [
          "bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92",
          "dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3"
        ],
        "license": "MIT"
      },
      "src/interfaces/IAddressProviderRegistry.sol": {
        "keccak256": "0x1a03fec8a99776cc581fe311dad785c49221005239c255e5dbdc210ea689d51f",
        "urls": [
          "bzz-raw://5fb0350cfba70aae0c48c1840e2dde26253718f411948c331d67169db985fb67",
          "dweb:/ipfs/QmehHRWv9zXtVznwUrrjRWDM8PJrYv1QX8espfs7NkCdNe"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/governance/AddressProviderRegistry.sol": {
        "keccak256": "0x1e60f8cfe7191c0ecb340dc6cb63f9d738cbec1937a44550b7e2848254d1e6a4",
        "urls": [
          "bzz-raw://b3526844583c7e34eadb45d16a9182085b2ea056e112a87fd95ea1b36fcb94cb",
          "dweb:/ipfs/QmSQ3KQVNLf7vqcvBvuVHvvcJdJ7iQwTmtYFFongRztb4f"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/helpers/Errors.sol": {
        "keccak256": "0x490e76871922e89a13ba0bb88977be18c143fa9d0cd9afb033744a3d81479c52",
        "urls": [
          "bzz-raw://1c409d4d1e1689d8d8f3c3e361198d20f3b6476608c5316d8e2d91f52373e8e3",
          "dweb:/ipfs/QmRZaYpxqjmBpbxb51KqswKYPSeCsU3ejbmk5E3MrMxJaM"
        ],
        "license": "AGPL-3.0"
      }
    },
    "version": 1
  },
  "ast": {
    "absolutePath": "src/protocol/governance/AddressProviderRegistry.sol",
    "id": 52340,
    "exportedSymbols": {
      "AddressProviderRegistry": [
        52339
      ],
      "Errors": [
        56338
      ],
      "IAddressProviderRegistry": [
        45755
      ],
      "Ownable": [
        30660
      ]
    },
    "nodeType": "SourceUnit",
    "src": "37:3114:119",
    "nodes": [
      {
        "id": 52142,
        "nodeType": "PragmaDirective",
        "src": "37:23:119",
        "nodes": [],
        "literals": [
          "solidity",
          "0.8",
          ".16"
        ]
      },
      {
        "id": 52144,
        "nodeType": "ImportDirective",
        "src": "62:89:119",
        "nodes": [],
        "absolutePath": "src/interfaces/IAddressProviderRegistry.sol",
        "file": "../../interfaces/IAddressProviderRegistry.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 52340,
        "sourceUnit": 45756,
        "symbolAliases": [
          {
            "foreign": {
              "id": 52143,
              "name": "IAddressProviderRegistry",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 45755,
              "src": "71:24:119",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 52146,
        "nodeType": "ImportDirective",
        "src": "152:57:119",
        "nodes": [],
        "absolutePath": "src/protocol/libraries/helpers/Errors.sol",
        "file": "../libraries/helpers/Errors.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 52340,
        "sourceUnit": 56339,
        "symbolAliases": [
          {
            "foreign": {
              "id": 52145,
              "name": "Errors",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 56338,
              "src": "161:6:119",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 52148,
        "nodeType": "ImportDirective",
        "src": "211:69:119",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts/contracts/access/Ownable.sol",
        "file": "@openzeppelin/contracts/access/Ownable.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 52340,
        "sourceUnit": 30661,
        "symbolAliases": [
          {
            "foreign": {
              "id": 52147,
              "name": "Ownable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 30660,
              "src": "220:7:119",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 52339,
        "nodeType": "ContractDefinition",
        "src": "667:2483:119",
        "nodes": [
          {
            "id": 52157,
            "nodeType": "VariableDeclaration",
            "src": "743:53:119",
            "nodes": [],
            "constant": false,
            "mutability": "mutable",
            "name": "_addressProviders",
            "nameLocation": "779:17:119",
            "scope": 52339,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 52156,
              "keyType": {
                "id": 52154,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "751:7:119",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "743:27:119",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 52155,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "762:7:119",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "private"
          },
          {
            "id": 52160,
            "nodeType": "VariableDeclaration",
            "src": "802:39:119",
            "nodes": [],
            "constant": false,
            "mutability": "mutable",
            "name": "_addressProvidersList",
            "nameLocation": "820:21:119",
            "scope": 52339,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_address_$dyn_storage",
              "typeString": "address[]"
            },
            "typeName": {
              "baseType": {
                "id": 52158,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "802:7:119",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "id": 52159,
              "nodeType": "ArrayTypeName",
              "src": "802:9:119",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                "typeString": "address[]"
              }
            },
            "visibility": "private"
          },
          {
            "id": 52223,
            "nodeType": "FunctionDefinition",
            "src": "1017:523:119",
            "nodes": [],
            "body": {
              "id": 52222,
              "nodeType": "Block",
              "src": "1102:438:119",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    52172
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 52172,
                      "mutability": "mutable",
                      "name": "addressProvidersList",
                      "nameLocation": "1129:20:119",
                      "nodeType": "VariableDeclaration",
                      "scope": 52222,
                      "src": "1112:37:119",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 52170,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1112:7:119",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 52171,
                        "nodeType": "ArrayTypeName",
                        "src": "1112:9:119",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 52174,
                  "initialValue": {
                    "id": 52173,
                    "name": "_addressProvidersList",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 52160,
                    "src": "1152:21:119",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                      "typeString": "address[] storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1112:61:119"
                },
                {
                  "assignments": [
                    52176
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 52176,
                      "mutability": "mutable",
                      "name": "maxLength",
                      "nameLocation": "1192:9:119",
                      "nodeType": "VariableDeclaration",
                      "scope": 52222,
                      "src": "1184:17:119",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 52175,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1184:7:119",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 52179,
                  "initialValue": {
                    "expression": {
                      "id": 52177,
                      "name": "addressProvidersList",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 52172,
                      "src": "1204:20:119",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[] memory"
                      }
                    },
                    "id": 52178,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "1225:6:119",
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "src": "1204:27:119",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1184:47:119"
                },
                {
                  "assignments": [
                    52184
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 52184,
                      "mutability": "mutable",
                      "name": "activeProviders",
                      "nameLocation": "1259:15:119",
                      "nodeType": "VariableDeclaration",
                      "scope": 52222,
                      "src": "1242:32:119",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 52182,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1242:7:119",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 52183,
                        "nodeType": "ArrayTypeName",
                        "src": "1242:9:119",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 52190,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 52188,
                        "name": "maxLength",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 52176,
                        "src": "1291:9:119",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 52187,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "1277:13:119",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (address[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 52185,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1281:7:119",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 52186,
                        "nodeType": "ArrayTypeName",
                        "src": "1281:9:119",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      }
                    },
                    "id": 52189,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1277:24:119",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                      "typeString": "address[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1242:59:119"
                },
                {
                  "body": {
                    "id": 52218,
                    "nodeType": "Block",
                    "src": "1352:149:119",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 52207,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "id": 52201,
                              "name": "_addressProviders",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 52157,
                              "src": "1370:17:119",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 52205,
                            "indexExpression": {
                              "baseExpression": {
                                "id": 52202,
                                "name": "addressProvidersList",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 52172,
                                "src": "1388:20:119",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 52204,
                              "indexExpression": {
                                "id": 52203,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 52192,
                                "src": "1409:1:119",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "1388:23:119",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1370:42:119",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 52206,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1415:1:119",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1370:46:119",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 52217,
                        "nodeType": "IfStatement",
                        "src": "1366:125:119",
                        "trueBody": {
                          "id": 52216,
                          "nodeType": "Block",
                          "src": "1418:73:119",
                          "statements": [
                            {
                              "expression": {
                                "id": 52214,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "id": 52208,
                                    "name": "activeProviders",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 52184,
                                    "src": "1432:15:119",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                      "typeString": "address[] memory"
                                    }
                                  },
                                  "id": 52210,
                                  "indexExpression": {
                                    "id": 52209,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 52192,
                                    "src": "1448:1:119",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "1432:18:119",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "baseExpression": {
                                    "id": 52211,
                                    "name": "addressProvidersList",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 52172,
                                    "src": "1453:20:119",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                      "typeString": "address[] memory"
                                    }
                                  },
                                  "id": 52213,
                                  "indexExpression": {
                                    "id": 52212,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 52192,
                                    "src": "1474:1:119",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "1453:23:119",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "1432:44:119",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 52215,
                              "nodeType": "ExpressionStatement",
                              "src": "1432:44:119"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 52197,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 52195,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 52192,
                      "src": "1332:1:119",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 52196,
                      "name": "maxLength",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 52176,
                      "src": "1336:9:119",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1332:13:119",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 52219,
                  "initializationExpression": {
                    "assignments": [
                      52192
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 52192,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "1325:1:119",
                        "nodeType": "VariableDeclaration",
                        "scope": 52219,
                        "src": "1317:9:119",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 52191,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1317:7:119",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 52194,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 52193,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1329:1:119",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "1317:13:119"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 52199,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "1347:3:119",
                      "subExpression": {
                        "id": 52198,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 52192,
                        "src": "1347:1:119",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 52200,
                    "nodeType": "ExpressionStatement",
                    "src": "1347:3:119"
                  },
                  "nodeType": "ForStatement",
                  "src": "1312:189:119"
                },
                {
                  "expression": {
                    "id": 52220,
                    "name": "activeProviders",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 52184,
                    "src": "1518:15:119",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                      "typeString": "address[] memory"
                    }
                  },
                  "functionReturnParameters": 52167,
                  "id": 52221,
                  "nodeType": "Return",
                  "src": "1511:22:119"
                }
              ]
            },
            "baseFunctions": [
              45735
            ],
            "documentation": {
              "id": 52161,
              "nodeType": "StructuredDocumentation",
              "src": "848:164:119",
              "text": " @dev Returns the list of registered addresses provider\n @return The list of addresses provider, potentially containing address(0) elements*"
            },
            "functionSelector": "c4ea1e0d",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getAddressProvidersList",
            "nameLocation": "1026:23:119",
            "overrides": {
              "id": 52163,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1066:8:119"
            },
            "parameters": {
              "id": 52162,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1049:2:119"
            },
            "returnParameters": {
              "id": 52167,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 52166,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 52223,
                  "src": "1084:16:119",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 52164,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1084:7:119",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 52165,
                    "nodeType": "ArrayTypeName",
                    "src": "1084:9:119",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1083:18:119"
            },
            "scope": 52339,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 52257,
            "nodeType": "FunctionDefinition",
            "src": "1760:305:119",
            "nodes": [],
            "body": {
              "id": 52256,
              "nodeType": "Block",
              "src": "1851:214:119",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 52237,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 52235,
                          "name": "id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 52228,
                          "src": "1869:2:119",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 52236,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1875:1:119",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "1869:7:119",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "expression": {
                          "id": 52238,
                          "name": "Errors",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 56338,
                          "src": "1878:6:119",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Errors_$56338_$",
                            "typeString": "type(library Errors)"
                          }
                        },
                        "id": 52239,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "1885:33:119",
                        "memberName": "LPAPR_INVALID_ADDRESS_PROVIDER_ID",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 56274,
                        "src": "1878:40:119",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 52234,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1861:7:119",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 52240,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1861:58:119",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 52241,
                  "nodeType": "ExpressionStatement",
                  "src": "1861:58:119"
                },
                {
                  "expression": {
                    "id": 52246,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 52242,
                        "name": "_addressProviders",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 52157,
                        "src": "1930:17:119",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 52244,
                      "indexExpression": {
                        "id": 52243,
                        "name": "provider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 52226,
                        "src": "1948:8:119",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "1930:27:119",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 52245,
                      "name": "id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 52228,
                      "src": "1960:2:119",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1930:32:119",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 52247,
                  "nodeType": "ExpressionStatement",
                  "src": "1930:32:119"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 52249,
                        "name": "provider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 52226,
                        "src": "1999:8:119",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 52248,
                      "name": "_addToAddressProvidersList",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 52338,
                      "src": "1972:26:119",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 52250,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1972:36:119",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 52251,
                  "nodeType": "ExpressionStatement",
                  "src": "1972:36:119"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 52253,
                        "name": "provider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 52226,
                        "src": "2049:8:119",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 52252,
                      "name": "AddressProviderRegistered",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45725,
                      "src": "2023:25:119",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 52254,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2023:35:119",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 52255,
                  "nodeType": "EmitStatement",
                  "src": "2018:40:119"
                }
              ]
            },
            "baseFunctions": [
              45749
            ],
            "documentation": {
              "id": 52224,
              "nodeType": "StructuredDocumentation",
              "src": "1546:209:119",
              "text": " @dev Registers an addresses provider\n @param provider The address of the new AddressProvider\n @param id The id for the new AddressProvider, referring to the market it belongs to*"
            },
            "functionSelector": "9219d4f5",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 52232,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 52231,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "1841:9:119"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 30579,
                  "src": "1841:9:119"
                },
                "nodeType": "ModifierInvocation",
                "src": "1841:9:119"
              }
            ],
            "name": "registerAddressProvider",
            "nameLocation": "1769:23:119",
            "overrides": {
              "id": 52230,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1832:8:119"
            },
            "parameters": {
              "id": 52229,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 52226,
                  "mutability": "mutable",
                  "name": "provider",
                  "nameLocation": "1801:8:119",
                  "nodeType": "VariableDeclaration",
                  "scope": 52257,
                  "src": "1793:16:119",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 52225,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1793:7:119",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 52228,
                  "mutability": "mutable",
                  "name": "id",
                  "nameLocation": "1819:2:119",
                  "nodeType": "VariableDeclaration",
                  "scope": 52257,
                  "src": "1811:10:119",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 52227,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1811:7:119",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1792:30:119"
            },
            "returnParameters": {
              "id": 52233,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1851:0:119"
            },
            "scope": 52339,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 52287,
            "nodeType": "FunctionDefinition",
            "src": "2224:269:119",
            "nodes": [],
            "body": {
              "id": 52286,
              "nodeType": "Block",
              "src": "2305:188:119",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 52271,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "baseExpression": {
                            "id": 52267,
                            "name": "_addressProviders",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 52157,
                            "src": "2323:17:119",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 52269,
                          "indexExpression": {
                            "id": 52268,
                            "name": "provider",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 52260,
                            "src": "2341:8:119",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2323:27:119",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 52270,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2353:1:119",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "2323:31:119",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "expression": {
                          "id": 52272,
                          "name": "Errors",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 56338,
                          "src": "2356:6:119",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Errors_$56338_$",
                            "typeString": "type(library Errors)"
                          }
                        },
                        "id": 52273,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "2363:29:119",
                        "memberName": "LPAPR_PROVIDER_NOT_REGISTERED",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 56271,
                        "src": "2356:36:119",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 52266,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2315:7:119",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 52274,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2315:78:119",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 52275,
                  "nodeType": "ExpressionStatement",
                  "src": "2315:78:119"
                },
                {
                  "expression": {
                    "id": 52280,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 52276,
                        "name": "_addressProviders",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 52157,
                        "src": "2403:17:119",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 52278,
                      "indexExpression": {
                        "id": 52277,
                        "name": "provider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 52260,
                        "src": "2421:8:119",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2403:27:119",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "30",
                      "id": 52279,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2433:1:119",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "2403:31:119",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 52281,
                  "nodeType": "ExpressionStatement",
                  "src": "2403:31:119"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 52283,
                        "name": "provider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 52260,
                        "src": "2477:8:119",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 52282,
                      "name": "AddressProviderUnregistered",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45729,
                      "src": "2449:27:119",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 52284,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2449:37:119",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 52285,
                  "nodeType": "EmitStatement",
                  "src": "2444:42:119"
                }
              ]
            },
            "baseFunctions": [
              45754
            ],
            "documentation": {
              "id": 52258,
              "nodeType": "StructuredDocumentation",
              "src": "2071:148:119",
              "text": " @dev Removes a AddressProvider from the list of registered addresses provider\n @param provider The AddressProvider address*"
            },
            "functionSelector": "389140b8",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 52264,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 52263,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "2295:9:119"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 30579,
                  "src": "2295:9:119"
                },
                "nodeType": "ModifierInvocation",
                "src": "2295:9:119"
              }
            ],
            "name": "unregisterAddressProvider",
            "nameLocation": "2233:25:119",
            "overrides": {
              "id": 52262,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2286:8:119"
            },
            "parameters": {
              "id": 52261,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 52260,
                  "mutability": "mutable",
                  "name": "provider",
                  "nameLocation": "2267:8:119",
                  "nodeType": "VariableDeclaration",
                  "scope": 52287,
                  "src": "2259:16:119",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 52259,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2259:7:119",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2258:18:119"
            },
            "returnParameters": {
              "id": 52265,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2305:0:119"
            },
            "scope": 52339,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 52301,
            "nodeType": "FunctionDefinition",
            "src": "2643:163:119",
            "nodes": [],
            "body": {
              "id": 52300,
              "nodeType": "Block",
              "src": "2748:58:119",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "id": 52296,
                      "name": "_addressProviders",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 52157,
                      "src": "2765:17:119",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 52298,
                    "indexExpression": {
                      "id": 52297,
                      "name": "addressProvider",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 52290,
                      "src": "2783:15:119",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "2765:34:119",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 52295,
                  "id": 52299,
                  "nodeType": "Return",
                  "src": "2758:41:119"
                }
              ]
            },
            "baseFunctions": [
              45742
            ],
            "documentation": {
              "id": 52288,
              "nodeType": "StructuredDocumentation",
              "src": "2499:139:119",
              "text": " @dev Returns the id on a registered AddressProvider\n @return The id or 0 if the AddressProvider is not registered*"
            },
            "functionSelector": "d1bb2da1",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getAddressProviderIdByAddress",
            "nameLocation": "2652:29:119",
            "overrides": {
              "id": 52292,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2721:8:119"
            },
            "parameters": {
              "id": 52291,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 52290,
                  "mutability": "mutable",
                  "name": "addressProvider",
                  "nameLocation": "2690:15:119",
                  "nodeType": "VariableDeclaration",
                  "scope": 52301,
                  "src": "2682:23:119",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 52289,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2682:7:119",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2681:25:119"
            },
            "returnParameters": {
              "id": 52295,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 52294,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 52301,
                  "src": "2739:7:119",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 52293,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2739:7:119",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2738:9:119"
            },
            "scope": 52339,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 52338,
            "nodeType": "FunctionDefinition",
            "src": "2812:336:119",
            "nodes": [],
            "body": {
              "id": 52337,
              "nodeType": "Block",
              "src": "2875:273:119",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    52307
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 52307,
                      "mutability": "mutable",
                      "name": "providersCount",
                      "nameLocation": "2893:14:119",
                      "nodeType": "VariableDeclaration",
                      "scope": 52337,
                      "src": "2885:22:119",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 52306,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2885:7:119",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 52310,
                  "initialValue": {
                    "expression": {
                      "id": 52308,
                      "name": "_addressProvidersList",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 52160,
                      "src": "2910:21:119",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                        "typeString": "address[] storage ref"
                      }
                    },
                    "id": 52309,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "2932:6:119",
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "src": "2910:28:119",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2885:53:119"
                },
                {
                  "body": {
                    "id": 52329,
                    "nodeType": "Block",
                    "src": "2994:101:119",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 52325,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "id": 52321,
                              "name": "_addressProvidersList",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 52160,
                              "src": "3012:21:119",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                "typeString": "address[] storage ref"
                              }
                            },
                            "id": 52323,
                            "indexExpression": {
                              "id": 52322,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 52312,
                              "src": "3034:1:119",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3012:24:119",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 52324,
                            "name": "provider",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 52303,
                            "src": "3040:8:119",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "3012:36:119",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 52328,
                        "nodeType": "IfStatement",
                        "src": "3008:77:119",
                        "trueBody": {
                          "id": 52327,
                          "nodeType": "Block",
                          "src": "3050:35:119",
                          "statements": [
                            {
                              "functionReturnParameters": 52305,
                              "id": 52326,
                              "nodeType": "Return",
                              "src": "3064:7:119"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 52317,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 52315,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 52312,
                      "src": "2969:1:119",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 52316,
                      "name": "providersCount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 52307,
                      "src": "2973:14:119",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2969:18:119",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 52330,
                  "initializationExpression": {
                    "assignments": [
                      52312
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 52312,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "2962:1:119",
                        "nodeType": "VariableDeclaration",
                        "scope": 52330,
                        "src": "2954:9:119",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 52311,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2954:7:119",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 52314,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 52313,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2966:1:119",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "2954:13:119"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 52319,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "2989:3:119",
                      "subExpression": {
                        "id": 52318,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 52312,
                        "src": "2989:1:119",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 52320,
                    "nodeType": "ExpressionStatement",
                    "src": "2989:3:119"
                  },
                  "nodeType": "ForStatement",
                  "src": "2949:146:119"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 52334,
                        "name": "provider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 52303,
                        "src": "3132:8:119",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 52331,
                        "name": "_addressProvidersList",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 52160,
                        "src": "3105:21:119",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage",
                          "typeString": "address[] storage ref"
                        }
                      },
                      "id": 52333,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "3127:4:119",
                      "memberName": "push",
                      "nodeType": "MemberAccess",
                      "src": "3105:26:119",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypush_nonpayable$_t_array$_t_address_$dyn_storage_ptr_$_t_address_$returns$__$bound_to$_t_array$_t_address_$dyn_storage_ptr_$",
                        "typeString": "function (address[] storage pointer,address)"
                      }
                    },
                    "id": 52335,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3105:36:119",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 52336,
                  "nodeType": "ExpressionStatement",
                  "src": "3105:36:119"
                }
              ]
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_addToAddressProvidersList",
            "nameLocation": "2821:26:119",
            "parameters": {
              "id": 52304,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 52303,
                  "mutability": "mutable",
                  "name": "provider",
                  "nameLocation": "2856:8:119",
                  "nodeType": "VariableDeclaration",
                  "scope": 52338,
                  "src": "2848:16:119",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 52302,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2848:7:119",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2847:18:119"
            },
            "returnParameters": {
              "id": 52305,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2875:0:119"
            },
            "scope": 52339,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 52150,
              "name": "Ownable",
              "nameLocations": [
                "703:7:119"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 30660,
              "src": "703:7:119"
            },
            "id": 52151,
            "nodeType": "InheritanceSpecifier",
            "src": "703:7:119"
          },
          {
            "baseName": {
              "id": 52152,
              "name": "IAddressProviderRegistry",
              "nameLocations": [
                "712:24:119"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 45755,
              "src": "712:24:119"
            },
            "id": 52153,
            "nodeType": "InheritanceSpecifier",
            "src": "712:24:119"
          }
        ],
        "canonicalName": "AddressProviderRegistry",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 52149,
          "nodeType": "StructuredDocumentation",
          "src": "282:384:119",
          "text": " @title AddressProviderRegistry contract\n @dev Main registry of AddressProvider of multiple FluidNFT protocol's markets\n - Used for indexing purposes of FluidNFT protocol's markets\n - The id assigned to a AddressProvider refers to the market it is connected with,\n   for example with `1` for the FluidNFT main market and `2` for the next created\n @author FluidNFT*"
        },
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          52339,
          45755,
          30660,
          35271
        ],
        "name": "AddressProviderRegistry",
        "nameLocation": "676:23:119",
        "scope": 52340,
        "usedErrors": []
      }
    ],
    "license": "AGPL-3.0"
  },
  "id": 119
}
```

</details>


# IAddressProviderRegistry

{% tabs %}
{% tab title="IAddressProviderRegistry.sol" %}

```solidity
// SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.16;

/**
 * @title IAddressProviderRegistry contract
 * @dev Main registry of AddressProvider of multiple FluidNFT protocol's markets
 * - Used for indexing purposes of FluidNFT protocol's markets
 * - The id assigned to a AddressProvider refers to the market it is connected with,
 *   for example with `1` for the FluidNFT main market and `2` for the next created
 * @author FluidNFT
 **/
interface IAddressProviderRegistry {
    event AddressProviderRegistered(address indexed newAddress);
    event AddressProviderUnregistered(address indexed newAddress);

    function getAddressProvidersList() external view returns (address[] memory);

    function getAddressProviderIdByAddress(address addressesProvider) external view returns (uint256);

    function registerAddressProvider(address provider, uint256 id) external;

    function unregisterAddressProvider(address provider) external;
}
```

{% endtab %}
{% endtabs %}


# Execution Manager

The `ExecutionManager` contract is a proxy contract to manage protocol calls.

## Methods <a href="#functionality" id="functionality"></a>

### call()[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#functionality) <a href="#functionality" id="functionality"></a>

**`function call(address target, bytes calldata payload)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

<table><thead><tr><th width="227.33333333333331">Parameter Name</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code>target</code></td><td>address</td><td>contract address to target</td></tr><tr><td><code>payload</code></td><td>bytes calldata</td><td>payload to call target method with encoded parameters</td></tr></tbody></table>

### multiCall()[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#functionality) <a href="#functionality" id="functionality"></a>

**`function multiCall(address[] calldata targets, bytes[] calldata payloads, bool[] calldata allowErrors)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

<table><thead><tr><th width="227.33333333333331">Parameter Name</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code>targets</code></td><td>address[] calldata</td><td>contract addresses to targets</td></tr><tr><td><code>payloads</code></td><td>bytes[] calldata</td><td>payloads to call target method with encoded parameters</td></tr><tr><td><code>allowErrors</code></td><td>bool[] calldata</td><td>true if multiCall allowed to proceed given an error</td></tr></tbody></table>

## ABI

<details>

<summary>Execution Manager ABI</summary>

```
{
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "payload",
          "type": "bytes"
        }
      ],
      "name": "call",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "targets",
          "type": "address[]"
        },
        {
          "internalType": "bytes[]",
          "name": "payloads",
          "type": "bytes[]"
        },
        {
          "internalType": "bool[]",
          "name": "allowErrors",
          "type": "bool[]"
        }
      ],
      "name": "multiCall",
      "outputs": [
        {
          "internalType": "bytes[]",
          "name": "results",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x",
    "sourceMap": "",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x",
    "sourceMap": "",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "call(address,bytes)": "1b8b921d",
    "multiCall(address[],bytes[],bool[])": "8c5ef5b3"
  },
  "rawMetadata": "{\"compiler\":{\"version\":\"0.8.16+commit.07a7930e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"call\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"targets\",\"type\":\"address[]\"},{\"internalType\":\"bytes[]\",\"name\":\"payloads\",\"type\":\"bytes[]\"},{\"internalType\":\"bool[]\",\"name\":\"allowErrors\",\"type\":\"bool[]\"}],\"name\":\"multiCall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/interfaces/IExecutionManager.sol\":\"IExecutionManager\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@chainlink/=lib/chainlink/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":chainlink/=lib/chainlink/integration-tests/contracts/ethereum/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"src/interfaces/IExecutionManager.sol\":{\"keccak256\":\"0x5ac59a01e9601420e63bf0dfd3227aad12c2c43460a6425022298a216d51bec8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://04fa65b57b3ac2787670400aece04a9c63742f84010ad0c5519d5850480ad326\",\"dweb:/ipfs/QmWnCcddBzzYVkKcxN566ms6JXzZGo4SMJK1mqDhFt3UmP\"]},\"src/protocol/libraries/types/DataTypes.sol\":{\"keccak256\":\"0x0103c43499e5226d36906042a1723a3ee6ee18ba607cbffc9e776d4dc47edc10\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://550191b44b6ddfe84d81bd5ded46e1ab3ac493399adfca3634fd8348a4a087fa\",\"dweb:/ipfs/QmeoHga9azsBkTRdnzH9USs51JduGR2tgge5YmGW8dJ2Tq\"]}},\"version\":1}",
  "metadata": {
    "compiler": {
      "version": "0.8.16+commit.07a7930e"
    },
    "language": "Solidity",
    "output": {
      "abi": [
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "target",
              "type": "address"
            },
            {
              "internalType": "bytes",
              "name": "payload",
              "type": "bytes"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "call",
          "outputs": [
            {
              "internalType": "bytes",
              "name": "",
              "type": "bytes"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address[]",
              "name": "targets",
              "type": "address[]"
            },
            {
              "internalType": "bytes[]",
              "name": "payloads",
              "type": "bytes[]"
            },
            {
              "internalType": "bool[]",
              "name": "allowErrors",
              "type": "bool[]"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "multiCall",
          "outputs": [
            {
              "internalType": "bytes[]",
              "name": "results",
              "type": "bytes[]"
            }
          ]
        }
      ],
      "devdoc": {
        "kind": "dev",
        "methods": {},
        "version": 1
      },
      "userdoc": {
        "kind": "user",
        "methods": {},
        "version": 1
      }
    },
    "settings": {
      "remappings": [
        ":@chainlink/=lib/chainlink/",
        ":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
        ":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
        ":chainlink/=lib/chainlink/integration-tests/contracts/ethereum/src/",
        ":ds-test/=lib/forge-std/lib/ds-test/src/",
        ":forge-std/=lib/forge-std/src/"
      ],
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "metadata": {
        "bytecodeHash": "ipfs"
      },
      "compilationTarget": {
        "src/interfaces/IExecutionManager.sol": "IExecutionManager"
      },
      "libraries": {}
    },
    "sources": {
      "src/interfaces/IExecutionManager.sol": {
        "keccak256": "0x5ac59a01e9601420e63bf0dfd3227aad12c2c43460a6425022298a216d51bec8",
        "urls": [
          "bzz-raw://04fa65b57b3ac2787670400aece04a9c63742f84010ad0c5519d5850480ad326",
          "dweb:/ipfs/QmWnCcddBzzYVkKcxN566ms6JXzZGo4SMJK1mqDhFt3UmP"
        ],
        "license": "MIT"
      },
      "src/protocol/libraries/types/DataTypes.sol": {
        "keccak256": "0x0103c43499e5226d36906042a1723a3ee6ee18ba607cbffc9e776d4dc47edc10",
        "urls": [
          "bzz-raw://550191b44b6ddfe84d81bd5ded46e1ab3ac493399adfca3634fd8348a4a087fa",
          "dweb:/ipfs/QmeoHga9azsBkTRdnzH9USs51JduGR2tgge5YmGW8dJ2Tq"
        ],
        "license": "AGPL-3.0"
      }
    },
    "version": 1
  },
  "ast": {
    "absolutePath": "src/interfaces/IExecutionManager.sol",
    "id": 47215,
    "exportedSymbols": {
      "DataTypes": [
        65280
      ],
      "IExecutionManager": [
        47214
      ]
    },
    "nodeType": "SourceUnit",
    "src": "32:436:105",
    "nodes": [
      {
        "id": 47187,
        "nodeType": "PragmaDirective",
        "src": "32:23:105",
        "nodes": [],
        "literals": [
          "solidity",
          "0.8",
          ".16"
        ]
      },
      {
        "id": 47189,
        "nodeType": "ImportDirective",
        "src": "57:70:105",
        "nodes": [],
        "absolutePath": "src/protocol/libraries/types/DataTypes.sol",
        "file": "../protocol/libraries/types/DataTypes.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 47215,
        "sourceUnit": 65281,
        "symbolAliases": [
          {
            "foreign": {
              "id": 47188,
              "name": "DataTypes",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 65280,
              "src": "66:9:105",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 47214,
        "nodeType": "ContractDefinition",
        "src": "129:339:105",
        "nodes": [
          {
            "id": 47198,
            "nodeType": "FunctionDefinition",
            "src": "163:104:105",
            "nodes": [],
            "functionSelector": "1b8b921d",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "call",
            "nameLocation": "172:4:105",
            "parameters": {
              "id": 47194,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 47191,
                  "mutability": "mutable",
                  "name": "target",
                  "nameLocation": "185:6:105",
                  "nodeType": "VariableDeclaration",
                  "scope": 47198,
                  "src": "177:14:105",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 47190,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "177:7:105",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 47193,
                  "mutability": "mutable",
                  "name": "payload",
                  "nameLocation": "208:7:105",
                  "nodeType": "VariableDeclaration",
                  "scope": 47198,
                  "src": "193:22:105",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 47192,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "193:5:105",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "176:40:105"
            },
            "returnParameters": {
              "id": 47197,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 47196,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 47198,
                  "src": "253:12:105",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 47195,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "253:5:105",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "252:14:105"
            },
            "scope": 47214,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 47213,
            "nodeType": "FunctionDefinition",
            "src": "273:193:105",
            "nodes": [],
            "functionSelector": "8c5ef5b3",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "multiCall",
            "nameLocation": "282:9:105",
            "parameters": {
              "id": 47208,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 47201,
                  "mutability": "mutable",
                  "name": "targets",
                  "nameLocation": "320:7:105",
                  "nodeType": "VariableDeclaration",
                  "scope": 47213,
                  "src": "301:26:105",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 47199,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "301:7:105",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 47200,
                    "nodeType": "ArrayTypeName",
                    "src": "301:9:105",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 47204,
                  "mutability": "mutable",
                  "name": "payloads",
                  "nameLocation": "354:8:105",
                  "nodeType": "VariableDeclaration",
                  "scope": 47213,
                  "src": "337:25:105",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                    "typeString": "bytes[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 47202,
                      "name": "bytes",
                      "nodeType": "ElementaryTypeName",
                      "src": "337:5:105",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage_ptr",
                        "typeString": "bytes"
                      }
                    },
                    "id": 47203,
                    "nodeType": "ArrayTypeName",
                    "src": "337:7:105",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                      "typeString": "bytes[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 47207,
                  "mutability": "mutable",
                  "name": "allowErrors",
                  "nameLocation": "388:11:105",
                  "nodeType": "VariableDeclaration",
                  "scope": 47213,
                  "src": "372:27:105",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bool_$dyn_calldata_ptr",
                    "typeString": "bool[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 47205,
                      "name": "bool",
                      "nodeType": "ElementaryTypeName",
                      "src": "372:4:105",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "id": 47206,
                    "nodeType": "ArrayTypeName",
                    "src": "372:6:105",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bool_$dyn_storage_ptr",
                      "typeString": "bool[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "291:114:105"
            },
            "returnParameters": {
              "id": 47212,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 47211,
                  "mutability": "mutable",
                  "name": "results",
                  "nameLocation": "457:7:105",
                  "nodeType": "VariableDeclaration",
                  "scope": 47213,
                  "src": "442:22:105",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
                    "typeString": "bytes[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 47209,
                      "name": "bytes",
                      "nodeType": "ElementaryTypeName",
                      "src": "442:5:105",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage_ptr",
                        "typeString": "bytes"
                      }
                    },
                    "id": 47210,
                    "nodeType": "ArrayTypeName",
                    "src": "442:7:105",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                      "typeString": "bytes[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "441:24:105"
            },
            "scope": 47214,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "abstract": false,
        "baseContracts": [],
        "canonicalName": "IExecutionManager",
        "contractDependencies": [],
        "contractKind": "interface",
        "fullyImplemented": false,
        "linearizedBaseContracts": [
          47214
        ],
        "name": "IExecutionManager",
        "nameLocation": "139:17:105",
        "scope": 47215,
        "usedErrors": []
      }
    ],
    "license": "MIT"
  },
  "id": 105
}
```

</details>


# IExecutionManager

{% tabs %}
{% tab title="IExecutionManager.sol" %}

```solidity
// SPDX-License-Identifier: MIT
pragma solidity 0.8.16;

import { DataTypes } from "../protocol/libraries/types/DataTypes.sol";

interface IExecutionManager {
    function call(address target, bytes calldata payload) 
        external 
        returns (bytes memory);

    function multiCall(
        address[] calldata targets,
        bytes[] calldata payloads,
        bool[] calldata allowErrors
    ) 
        external 
        returns (bytes[] memory results);
}
```

{% endtab %}

{% tab title="DataTypes.sol" %}

```solidity
// SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.16;

library DataTypes {

    /// -----------------------------------------------------------------------
    /// Exec
    /// -----------------------------------------------------------------------
    
    struct ExecItemParams {
        address target;
        bytes payload;
    }

    struct ExecBatchItemParams {
        address[] targets;
        bytes[] payloads;
        bool[] allowErrors;
    }

    /// -----------------------------------------------------------------------
    /// P2Pool
    /// -----------------------------------------------------------------------

    enum BorrowStatus { 
        None, // Default zero
        Active, // Open
        Repaid, // Closed, paid by borrower
        Auction, // In Auction
        Liquidated // Closed, paid by liquidator
    }

    enum PriceGroupStatus {
        None, // Default zero
        Active, // Able to set / get prices
        Paused, // Not able to perform any operation
        Protected // Only able to get prices
    }
    
    struct Reserve {
        ReserveConfigurationMap configuration;
        address collateral;
        address asset;
        address fTokenAddress;
        address stableDebtTokenAddress;
        address variableDebtTokenAddress;
        address interestRateAddress;
        string assetPriceFeed;
        uint256 id;
        uint256 maxTokenSupply;
        uint256 maxTokenId;
        uint256 minTokenId;
        uint128 liquidityIndex;
        uint128 variableBorrowIndex;
        uint128 currentLiquidityRate;
        uint128 currentVariableBorrowRate;
        uint40 lastUpdateTimestamp;
    }

    struct ReserveData {
        address collateral;
        address asset;
        uint256 maxTokenId;
        uint256 minTokenId;
    }

    struct InitReserveData {
        uint256 reserveId;
        address collateral;
        address asset;
        uint256 maxTokenId;
        uint256 minTokenId;
        address fTokenAddress;
        address stableDebtTokenAddress;
        address variableDebtTokenAddress;
        address interestRateAddress;
        string assetPriceFeed;
    }

    struct ReserveConfigurationMap {
        //bit 0-15: LTV
        //bit 16-31: Liq. threshold
        //bit 32-47: Liq. bonus
        //bit 48-55: Decimals
        //bit 56: Reserve is active
        //bit 57: reserve is frozen
        //bit 58: borrowing is enabled
        //bit 59: variable rate borrowing enabled
        //bit 60-63: reserved
        //bit 64-79: reserve factor
        //bit 80-95: grace period
        //bit 96-111: auction duration
        //bit 112-127: auction start price multiple
        uint256 data;
    }

    struct NFTPriceGroup {
        NFTPriceGroupConfigurationMap configuration;
        PriceGroupStatus status;
        address[15] nfts;
        uint256[15] reserveIds; 
        uint256[15] traitIds; 
        uint256[15] basePrices;
        uint256 id;
    } 

    struct NFTPriceGroupConfigurationMap {
        //bit 0-15: DELTA_01
        //bit 16-31: DELTA_02
        //bit 32-47: DELTA_03
        //bit 48-63: DELTA_04
        //bit 64-79: DELTA_05
        //bit 80-95: DELTA_06
        //bit 96-111: DELTA_07
        //bit 112-127: DELTA_08
        //bit 128-143: DELTA_09
        //bit 144-159: DELTA_10
        //bit 160-175: DELTA_11
        //bit 176-191: DELTA_12
        //bit 192-207: DELTA_13
        //bit 208-223: DELTA_14
        //bit 224-239: DELTA_15
        //bit 240: SIGN_01
        //bit 241: SIGN_02
        //bit 242: SIGN_03
        //bit 243: SIGN_04
        //bit 244: SIGN_05
        //bit 245: SIGN_06
        //bit 246: SIGN_07
        //bit 247: SIGN_08
        //bit 248: SIGN_09
        //bit 249: SIGN_10
        //bit 250: SIGN_11
        //bit 251: SIGN_12
        //bit 252: SIGN_13
        //bit 253: SIGN_14
        //bit 254: SIGN_15
        uint256 data;
    }

    struct Auction {
        address caller;
        uint256 startPrice;
        uint256 endPrice;
        uint256 timestamp;
    }

    struct Borrow {
        BorrowStatus status;
        Collateral collateral;
        Auction auction;
        address borrower;
        address erc20Token;
        uint256 borrowAmount; 
        uint256 scaledAmount;
        uint256 timestamp;
        uint256 duration;
        uint256 reserveId;
        uint256 tokenizedId;
    }

    struct ExecuteDepositParams {
        address initiator;
        uint256 amount;
        uint256 reserveId;
        address onBehalfOf;
        uint16 referralCode;
    }

    struct ExecuteBatchDepositParams {
        address initiator;
        uint256[] amounts;
        uint256[] reserveIds;
        address[] onBehalfOfs;
        uint16[] referralCodes;
    }

    struct ExecuteWithdrawParams {
        address initiator;
        uint256 amount;
        uint256 reserveId;
        address to;
    }

    struct ExecuteBatchWithdrawParams {
        address initiator;
        uint256[] amounts;
        uint256[] reserveIds;
        address[] tos;
    }

    struct ExecuteBorrowParams {
        address initiator;
        uint256 amount;
        uint256 tokenId;
        uint256 tokenValue;
        uint256 reserveId;
        uint256 duration;
        address onBehalfOf;
        uint16 referralCode;
    }

    struct ExecuteBatchBorrowParams {
        address initiator;
        uint256[] amounts;
        uint256[] tokenIds;
        uint256[] tokenValues;
        uint256[] reserveIds;
        uint256 duration;
        address onBehalfOf;
        uint16 referralCode;
    }

    struct ExecuteRepayParams {
        address initiator;
        uint256 borrowId;
        uint256 amount;
    }

    struct ExecuteBatchRepayParams {
        address initiator;
        uint256[] borrowIds;
        uint256[] amounts;
    }

    struct ExecuteRefinanceParams {
        address initiator;
        uint256 borrowId;
        uint256 amount;
        uint256 duration;
    }

    struct ExecuteBatchRefinanceParams {
        address initiator;
        uint256[] borrowIds;
        uint256[] amounts;
        uint256[] durations;
    }

    struct ExecuteAuctionParams {
        address initiator;
        uint256 borrowId;
        address onBehalfOf;
    }

    struct ExecuteBatchAuctionParams {
        address initiator;
        uint256[] borrowIds;
        address[] onBehalfOfs;
    }

    struct ExecuteBidParams {
        address initiator;
        address asset;
        uint256 amount;
        uint256 borrowId;
        address onBehalfOf;
    }

    struct ExecuteBatchBidParams {
        address initiator;
        address[] assets;
        uint256[] amounts;
        uint256[] borrowIds;
        address[] onBehalfOfs;
    }

    /// -----------------------------------------------------------------------
    /// Tokenized 
    /// -----------------------------------------------------------------------

    struct TokenizedLoan {
        address collateral;
        uint256 tokenId;
        uint256 id;
    }

    /// -----------------------------------------------------------------------
    /// P2Peer
    /// -----------------------------------------------------------------------

    enum LoanStatus {
        None, // Default zero
        Escrow, // Open
        Repaid, // Closed, lender received repayment 
        Refinanced, // Closed, lender received repayment 
        Foreclosed // Closed, lender received collateral
    }

    enum Side { Offer,  Listing }

    enum SignatureVersion { Single, Bulk }

    enum CollateralType { ERC721, ERC1155 } //TODO

    enum LoanType {
        Loan,
        Trait,
        Collection,
        Bundle,
        Renegotiation,
        Refinancing
    }

    struct Terms {
        LoanType loanType;
        /* Order collaterlTypes - empty item if not isBundle. */
        CollateralType[] collateralTypes;
        CollateralType collateralType;
        /* Order collaterals & tokenIds - empty if not isBundle. */
        address[] collaterals;
        uint256[] tokenIds;
        /* Order values - empty item if not ERC1155. */
        uint256[] values;
        /* Order collateral & tokenId - address(0) if isBundle. */
        address collateral;
        uint256 tokenId;
        /* Order value - empty item if not ERC1155. */
        uint256 value;
        address asset;
        uint256 amount;
        /* Order maximumRepayment - used for both fixed price and pro-rata loans. */
        uint256 maximumRepayment;
        /* Order minimumRepayment - used for pro-rata loans, 0 if none */
        uint256 minimumRepayment;
        /* Order interestRateInBasisPoints - used for pro-rata loans. */
        uint256 interestRateInBasisPoints; 
        uint256 duration;
        /* Loan isProRata - used enable pro-rata loan repayments. */
        bool isProRata;
        bool isBundle;
        /* Order loanId - 0 if creating a new loan. */
        uint256 loanId;
        /* Order fee - paid on renegotiation. */
        uint256 fee;
    }

    struct Order {
        address user;
        /* Referrer - for new loans & refinancing (borrower-side). */
        address referrer;
        Side side;
        Terms terms;
        /* Order counterparty - address(0) for open order. */
        address counterparty;
        bool isInstantExecution; 
        /* Order loanRepayment - for refinancing. */
        uint256 loanRepayment;
        uint256 listingTime;
        uint256 expirationTime;
        uint256 salt;
        /* Order message - for renegotiations. */
        string message;
        bytes extraParams;
        /* Borrow Id - for p2pool orders. */
        uint256 borrowId;
        /* Reserve Id - for fToken orders. */
        uint256 reserveId;
    }

    struct Input {
        Order order;
        uint8 v;
        bytes32 r;
        bytes32 s;
        bytes extraSignature;
        SignatureVersion signatureVersion;
        uint256 blockNumber;
    }

    struct Execution {
        Input offer;
        Input listing;
    }

    struct Collateral {
        /* Loan collateralType - ERC721 or ERC1155. */
        CollateralType collateralType;
        address collateral;
        uint256 tokenId;
        /* Loan value - collateral token amount (ERC1155, only). */
        uint256 value;
    }

    struct Collaterals {
        /* Loan collateralType - ERC721 or ERC1155. */
        CollateralType[] collateralTypes;
        address[] collaterals;
        uint256[] tokenIds;
        /* Loan value - collateral token amount (ERC1155, only). */
        uint256[] values;
    }

    struct Principal {
        address asset;
        uint256 amount;
    }

    struct Interest {
        /* Loan:Interest rate - in basis points (1/100th of a percent), used in pro-rata loans. */
        uint256 rate;
        /* Loan.Interest isProRata - to enable pro-rata loan repayments. */
        bool isProRata;
    }

    struct Repayment {
        /* Loan Repayment.maximum - used in both fixed price & pro-rata loans. */
        uint256 maximum;
        /* Loan Repayment.minimum - (optional) used in pro-rata loans. */
        uint256 minimum;
    }

    struct Loan {
        LoanStatus status;
        Collateral collateral;
        Principal principal;
        Interest interest;
        Repayment repayment;
        address borrower;
        address lender;
        address referrer;
        uint256 timestamp;
        uint256 duration;
        /* Loan tokenizedId - tokenId of promissoryNote and obligationReceipt. */
        uint256 tokenizedId;
    }

    struct LoanBundle {
        LoanStatus status;
        Collaterals collaterals;
        Principal principal;
        Interest interest;
        Repayment repayment;
        address borrower;
        address lender;
        address referrer;
        uint256 timestamp;
        uint256 duration;
        /* Loan tokenizedId - tokenId of promissoryNote and obligationReceipt. */
        uint256 tokenizedId;
    } 

    struct ExecuteNewLoanParams {
        DataTypes.Terms terms;
        address borrower;
        address lender;
        address referrer;
        /* Borrow Id - for p2pool Orders */
        uint256 borrowId;
        /* Reserve Id - for fToken Orders */
        uint256 reserveId;
    }

    struct ExecuteRepayLoanParams {
        uint256 loanId;
        uint256 lendingFactor;
        /* Reserve Id - for fToken repayment */
        uint256 reserveId;
    }

    struct ExecuteForecloseLoanParams {
        uint256 loanId;
    }

    struct ExecuteRenegotiateLoanParams {
        DataTypes.Terms terms;
        address borrower;
        address lender;
        /* Reserve Ids - for fToken Orders */
        uint256 borrowerReserveId;
        uint256 lenderReserveId;
    }

    struct ExecuteRefinanceLoanParams {
        DataTypes.Terms terms;
        address borrower;
        address lender;
        address referrer;
        uint256 loanRepayment;
        uint256 lendingFactor;
        /* Reserve Ids - for fToken Orders */
        uint256 borrowerReserveId;
        uint256 lenderReserveId;
    }
}
```

{% endtab %}
{% endtabs %}


# Execution Delegate

The `ExecutionDelegate` contract is a proxy contract to manage user token approvals.

## Methods <a href="#functionality" id="functionality"></a>

### transferERC721()[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#functionality) <a href="#functionality" id="functionality"></a>

**`function transferERC721(address collection, address from, address to, uint256 tokenId)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Transfer a ERC721 token using `safeTransferFrom`.

<table><thead><tr><th width="227.33333333333331">Parameter Name</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code>collection</code></td><td>address</td><td>address of the NFT collection</td></tr><tr><td><code>from</code></td><td>address</td><td>address to send the NFT</td></tr><tr><td><code>to</code></td><td>address</td><td>address to receive the NFT</td></tr><tr><td><code>tokenId</code></td><td>uint256</td><td>token id to transfer</td></tr></tbody></table>

### transferERC1155()[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#functionality) <a href="#functionality" id="functionality"></a>

**`function transferERC1155(address collection, address from, address to, uint256 tokenId, uint256 amount)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Transfer ERC1155 tokens using `safeTransferFrom`.

<table><thead><tr><th width="227.33333333333331">Parameter Name</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code>collection</code></td><td>address</td><td>address of the NFT collection</td></tr><tr><td><code>from</code></td><td>address</td><td>address to send the NFT</td></tr><tr><td><code>to</code></td><td>address</td><td>address to receive the NFT</td></tr><tr><td><code>tokenId</code></td><td>uint256</td><td>token id to transfer</td></tr><tr><td><code>amount</code></td><td>uint256</td><td>amount of tokens to transfer</td></tr></tbody></table>

### transferERC20()[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#functionality) <a href="#functionality" id="functionality"></a>

**`function transferERC20(address token, address from, address to, uint256 amount)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Transfer ERC20 tokens.

<table><thead><tr><th width="227.33333333333331">Parameter Name</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code>token</code></td><td>address</td><td>address of the token</td></tr><tr><td><code>from</code></td><td>address</td><td>address to send the tokens</td></tr><tr><td><code>to</code></td><td>address</td><td>address to receive the tokens</td></tr><tr><td><code>amount</code></td><td>uint256</td><td>amount of tokens to transfer</td></tr></tbody></table>

## ABI

<details>

<summary>Execution Delegate ABI</summary>

```
{
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_contract",
          "type": "address"
        }
      ],
      "name": "approveContract",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_contract",
          "type": "address"
        }
      ],
      "name": "denyContract",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "grantApproval",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "revokeApproval",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "collection",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferERC1155",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferERC20",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "collection",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "transferERC721",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "collection",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "transferERC721Unsafe",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x",
    "sourceMap": "",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x",
    "sourceMap": "",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "approveContract(address)": "07f7aafb",
    "denyContract(address)": "b7e2077e",
    "grantApproval()": "a8034df1",
    "revokeApproval()": "90d02b3c",
    "transferERC1155(address,address,address,uint256,uint256)": "74a9402e",
    "transferERC20(address,address,address,uint256)": "da3e8ce4",
    "transferERC721(address,address,address,uint256)": "789f93f6",
    "transferERC721Unsafe(address,address,address,uint256)": "ca72da8e"
  },
  "rawMetadata": "{\"compiler\":{\"version\":\"0.8.16+commit.07a7930e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_contract\",\"type\":\"address\"}],\"name\":\"approveContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_contract\",\"type\":\"address\"}],\"name\":\"denyContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"grantApproval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"revokeApproval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collection\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferERC1155\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collection\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferERC721\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collection\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferERC721Unsafe\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/interfaces/IExecutionDelegate.sol\":\"IExecutionDelegate\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@chainlink/=lib/chainlink/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":chainlink/=lib/chainlink/integration-tests/contracts/ethereum/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"src/interfaces/IExecutionDelegate.sol\":{\"keccak256\":\"0x9def180c3c45c492a967182aac61849fc1a77ca9f958abd3f27b689b01e61401\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cf406e8af1c9fa6373a66615022cd5c7edc41c169c46d660d5383df6647d3a5d\",\"dweb:/ipfs/QmRz7aDGbabWAw3BGFV2kbSmehGizSz3f7W87k6VXR3ggR\"]}},\"version\":1}",
  "metadata": {
    "compiler": {
      "version": "0.8.16+commit.07a7930e"
    },
    "language": "Solidity",
    "output": {
      "abi": [
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "_contract",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "approveContract"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "_contract",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "denyContract"
        },
        {
          "inputs": [],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "grantApproval"
        },
        {
          "inputs": [],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "revokeApproval"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "collection",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "from",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "transferERC1155"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "from",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "transferERC20"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "collection",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "from",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "transferERC721"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "collection",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "from",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "transferERC721Unsafe"
        }
      ],
      "devdoc": {
        "kind": "dev",
        "methods": {},
        "version": 1
      },
      "userdoc": {
        "kind": "user",
        "methods": {},
        "version": 1
      }
    },
    "settings": {
      "remappings": [
        ":@chainlink/=lib/chainlink/",
        ":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
        ":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
        ":chainlink/=lib/chainlink/integration-tests/contracts/ethereum/src/",
        ":ds-test/=lib/forge-std/lib/ds-test/src/",
        ":forge-std/=lib/forge-std/src/"
      ],
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "metadata": {
        "bytecodeHash": "ipfs"
      },
      "compilationTarget": {
        "src/interfaces/IExecutionDelegate.sol": "IExecutionDelegate"
      },
      "libraries": {}
    },
    "sources": {
      "src/interfaces/IExecutionDelegate.sol": {
        "keccak256": "0x9def180c3c45c492a967182aac61849fc1a77ca9f958abd3f27b689b01e61401",
        "urls": [
          "bzz-raw://cf406e8af1c9fa6373a66615022cd5c7edc41c169c46d660d5383df6647d3a5d",
          "dweb:/ipfs/QmRz7aDGbabWAw3BGFV2kbSmehGizSz3f7W87k6VXR3ggR"
        ],
        "license": "MIT"
      }
    },
    "version": 1
  },
  "ast": {
    "absolutePath": "src/interfaces/IExecutionDelegate.sol",
    "id": 49195,
    "exportedSymbols": {
      "IExecutionDelegate": [
        49194
      ]
    },
    "nodeType": "SourceUnit",
    "src": "32:673:111",
    "nodes": [
      {
        "id": 49131,
        "nodeType": "PragmaDirective",
        "src": "32:23:111",
        "nodes": [],
        "literals": [
          "solidity",
          "0.8",
          ".16"
        ]
      },
      {
        "id": 49194,
        "nodeType": "ContractDefinition",
        "src": "57:648:111",
        "nodes": [
          {
            "id": 49136,
            "nodeType": "FunctionDefinition",
            "src": "92:53:111",
            "nodes": [],
            "functionSelector": "07f7aafb",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "approveContract",
            "nameLocation": "101:15:111",
            "parameters": {
              "id": 49134,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 49133,
                  "mutability": "mutable",
                  "name": "_contract",
                  "nameLocation": "125:9:111",
                  "nodeType": "VariableDeclaration",
                  "scope": 49136,
                  "src": "117:17:111",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 49132,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "117:7:111",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "116:19:111"
            },
            "returnParameters": {
              "id": 49135,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "144:0:111"
            },
            "scope": 49194,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 49141,
            "nodeType": "FunctionDefinition",
            "src": "150:50:111",
            "nodes": [],
            "functionSelector": "b7e2077e",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "denyContract",
            "nameLocation": "159:12:111",
            "parameters": {
              "id": 49139,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 49138,
                  "mutability": "mutable",
                  "name": "_contract",
                  "nameLocation": "180:9:111",
                  "nodeType": "VariableDeclaration",
                  "scope": 49141,
                  "src": "172:17:111",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 49137,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "172:7:111",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "171:19:111"
            },
            "returnParameters": {
              "id": 49140,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "199:0:111"
            },
            "scope": 49194,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 49144,
            "nodeType": "FunctionDefinition",
            "src": "205:35:111",
            "nodes": [],
            "functionSelector": "90d02b3c",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "revokeApproval",
            "nameLocation": "214:14:111",
            "parameters": {
              "id": 49142,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "228:2:111"
            },
            "returnParameters": {
              "id": 49143,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "239:0:111"
            },
            "scope": 49194,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 49147,
            "nodeType": "FunctionDefinition",
            "src": "245:34:111",
            "nodes": [],
            "functionSelector": "a8034df1",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "grantApproval",
            "nameLocation": "254:13:111",
            "parameters": {
              "id": 49145,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "267:2:111"
            },
            "returnParameters": {
              "id": 49146,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "278:0:111"
            },
            "scope": 49194,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 49158,
            "nodeType": "FunctionDefinition",
            "src": "285:102:111",
            "nodes": [],
            "functionSelector": "ca72da8e",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "transferERC721Unsafe",
            "nameLocation": "294:20:111",
            "parameters": {
              "id": 49156,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 49149,
                  "mutability": "mutable",
                  "name": "collection",
                  "nameLocation": "323:10:111",
                  "nodeType": "VariableDeclaration",
                  "scope": 49158,
                  "src": "315:18:111",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 49148,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "315:7:111",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49151,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "343:4:111",
                  "nodeType": "VariableDeclaration",
                  "scope": 49158,
                  "src": "335:12:111",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 49150,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "335:7:111",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49153,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "357:2:111",
                  "nodeType": "VariableDeclaration",
                  "scope": 49158,
                  "src": "349:10:111",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 49152,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "349:7:111",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49155,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "369:7:111",
                  "nodeType": "VariableDeclaration",
                  "scope": 49158,
                  "src": "361:15:111",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 49154,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "361:7:111",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "314:63:111"
            },
            "returnParameters": {
              "id": 49157,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "386:0:111"
            },
            "scope": 49194,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 49169,
            "nodeType": "FunctionDefinition",
            "src": "393:96:111",
            "nodes": [],
            "functionSelector": "789f93f6",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "transferERC721",
            "nameLocation": "402:14:111",
            "parameters": {
              "id": 49167,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 49160,
                  "mutability": "mutable",
                  "name": "collection",
                  "nameLocation": "425:10:111",
                  "nodeType": "VariableDeclaration",
                  "scope": 49169,
                  "src": "417:18:111",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 49159,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "417:7:111",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49162,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "445:4:111",
                  "nodeType": "VariableDeclaration",
                  "scope": 49169,
                  "src": "437:12:111",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 49161,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "437:7:111",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49164,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "459:2:111",
                  "nodeType": "VariableDeclaration",
                  "scope": 49169,
                  "src": "451:10:111",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 49163,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "451:7:111",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49166,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "471:7:111",
                  "nodeType": "VariableDeclaration",
                  "scope": 49169,
                  "src": "463:15:111",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 49165,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "463:7:111",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "416:63:111"
            },
            "returnParameters": {
              "id": 49168,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "488:0:111"
            },
            "scope": 49194,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 49182,
            "nodeType": "FunctionDefinition",
            "src": "495:113:111",
            "nodes": [],
            "functionSelector": "74a9402e",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "transferERC1155",
            "nameLocation": "504:15:111",
            "parameters": {
              "id": 49180,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 49171,
                  "mutability": "mutable",
                  "name": "collection",
                  "nameLocation": "528:10:111",
                  "nodeType": "VariableDeclaration",
                  "scope": 49182,
                  "src": "520:18:111",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 49170,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "520:7:111",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49173,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "548:4:111",
                  "nodeType": "VariableDeclaration",
                  "scope": 49182,
                  "src": "540:12:111",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 49172,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "540:7:111",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49175,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "562:2:111",
                  "nodeType": "VariableDeclaration",
                  "scope": 49182,
                  "src": "554:10:111",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 49174,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "554:7:111",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49177,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "574:7:111",
                  "nodeType": "VariableDeclaration",
                  "scope": 49182,
                  "src": "566:15:111",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 49176,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "566:7:111",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49179,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "591:6:111",
                  "nodeType": "VariableDeclaration",
                  "scope": 49182,
                  "src": "583:14:111",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 49178,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "583:7:111",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "519:79:111"
            },
            "returnParameters": {
              "id": 49181,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "607:0:111"
            },
            "scope": 49194,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 49193,
            "nodeType": "FunctionDefinition",
            "src": "614:89:111",
            "nodes": [],
            "functionSelector": "da3e8ce4",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "transferERC20",
            "nameLocation": "623:13:111",
            "parameters": {
              "id": 49191,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 49184,
                  "mutability": "mutable",
                  "name": "token",
                  "nameLocation": "645:5:111",
                  "nodeType": "VariableDeclaration",
                  "scope": 49193,
                  "src": "637:13:111",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 49183,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "637:7:111",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49186,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "660:4:111",
                  "nodeType": "VariableDeclaration",
                  "scope": 49193,
                  "src": "652:12:111",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 49185,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "652:7:111",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49188,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "674:2:111",
                  "nodeType": "VariableDeclaration",
                  "scope": 49193,
                  "src": "666:10:111",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 49187,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "666:7:111",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49190,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "686:6:111",
                  "nodeType": "VariableDeclaration",
                  "scope": 49193,
                  "src": "678:14:111",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 49189,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "678:7:111",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "636:57:111"
            },
            "returnParameters": {
              "id": 49192,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "702:0:111"
            },
            "scope": 49194,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "abstract": false,
        "baseContracts": [],
        "canonicalName": "IExecutionDelegate",
        "contractDependencies": [],
        "contractKind": "interface",
        "fullyImplemented": false,
        "linearizedBaseContracts": [
          49194
        ],
        "name": "IExecutionDelegate",
        "nameLocation": "67:18:111",
        "scope": 49195,
        "usedErrors": []
      }
    ],
    "license": "MIT"
  },
  "id": 111
}
```

</details>


# IExecutionDelegate

{% tabs %}
{% tab title="IExecutionDelegate.sol" %}

```solidity
// SPDX-License-Identifier: MIT
pragma solidity 0.8.16;

interface IExecutionDelegate {
    function approveContract(address _contract) external;
    function denyContract(address _contract) external;
    function revokeApproval() external;
    function grantApproval() external;

    function transferERC721Unsafe(address collection, address from, address to, uint256 tokenId) external;

    function transferERC721(address collection, address from, address to, uint256 tokenId) external;

    function transferERC1155(address collection, address from, address to, uint256 tokenId, uint256 amount) external;

    function transferERC20(address token, address from, address to, uint256 amount) external;
}
```

{% endtab %}
{% endtabs %}


# Configurator

The `Configurator` contract is used by the admin as a single point of entry to configure protocol parameters.

## Methods <a href="#functionality" id="functionality"></a>

### batchInitLendingPoolReserve()[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#functionality) <a href="#functionality" id="functionality"></a>

**`function batchInitLendingPoolReserve(ConfigTypes.InitReserveInput[] calldata input)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Batch initialises lending pool reserves.

<table><thead><tr><th width="185.33333333333331">Parameter Name</th><th width="268.4697130712009">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>input</code></td><td>ConfigTypes.InitReserveInput[] calldata</td><td>See ConfigTypes library for detail.</td></tr></tbody></table>

### setBorrowingFlagOnReserve()[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#functionality) <a href="#functionality" id="functionality"></a>

**`function setBorrowingFlagOnReserve(uint256[] calldata reserveIds, bool flag)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Sets the borrowing for a given list of reserveIds.

<table><thead><tr><th width="185.33333333333331">Parameter Name</th><th width="268.4697130712009">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>reserveIds</code></td><td>uint256[] calldata</td><td>ids of target reserves</td></tr><tr><td><code>flag</code></td><td>bool</td><td>true if borrowing is enabled</td></tr></tbody></table>

### setBorrowingRateBorrowingOnReserve()[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#functionality) <a href="#functionality" id="functionality"></a>

**`function setVariableRateBorrowingOnReserve(uint256[] calldata reserveIds, bool flag)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Sets the variable rate borrowing for a given list of reserveIds.

<table><thead><tr><th width="185.33333333333331">Parameter Name</th><th width="268.4697130712009">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>reserveIds</code></td><td>uint256[] calldata</td><td>ids of target reserves</td></tr><tr><td><code>flag</code></td><td>bool</td><td>true if variable rate borrowing is enabled</td></tr></tbody></table>

### setActiveFlagOnReserve()[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#functionality) <a href="#functionality" id="functionality"></a>

**`function setActiveFlagOnReserve(uint256[] calldata reserveIds, bool flag)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Sets the active state for a given list of reserveIds.

<table><thead><tr><th width="185.33333333333331">Parameter Name</th><th width="268.4697130712009">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>reserveIds</code></td><td>uint256[] calldata</td><td>ids of target reserves</td></tr><tr><td><code>flag</code></td><td>bool</td><td>true if reserve is active</td></tr></tbody></table>

### setFreezeFlagOnReserve()[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#functionality) <a href="#functionality" id="functionality"></a>

**`function setFreezeFlagOnReserve(uint256[] calldata reserveIds, bool flag)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Sets the freeze state for a given list of reserveIds.

<table><thead><tr><th width="185.33333333333331">Parameter Name</th><th width="268.4697130712009">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>reserveIds</code></td><td>uint256[] calldata</td><td>ids of target reserves</td></tr><tr><td><code>flag</code></td><td>bool</td><td>true if reserve is frozen</td></tr></tbody></table>

### setReserveFactor()[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#functionality) <a href="#functionality" id="functionality"></a>

**`function setReserveFactor(uint256[] calldata reserveIds, uint256 factor)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Sets the reserve factor for a given list of reserveIds.

<table><thead><tr><th width="185.33333333333331">Parameter Name</th><th width="268.4697130712009">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>reserveIds</code></td><td>uint256[] calldata</td><td>ids of target reserves</td></tr><tr><td><code>factor</code></td><td>uint256</td><td>the percentage of yield that goes to the protocol</td></tr></tbody></table>

### setReserveInterestRateAddress()[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#functionality) <a href="#functionality" id="functionality"></a>

**`function setReserveInterestRateAddress(uint256[] calldata reserveIds, uint256 rateAddress)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Sets the reserve interest rate model address for a given list of reserveIds.

<table><thead><tr><th width="185.33333333333331">Parameter Name</th><th width="268.4697130712009">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>reserveIds</code></td><td>uint256[] calldata</td><td>ids of target reserves</td></tr><tr><td><code>rateAddress</code></td><td>address</td><td>address of the interest rate model</td></tr></tbody></table>

### batchConfigReserve()[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#functionality) <a href="#functionality" id="functionality"></a>

**`function batchConfigReserve(ConfigTypes.ConfigReserveInput[] calldata inputs)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Batch configures reserve parameters.

<table><thead><tr><th width="185.33333333333331">Parameter Name</th><th width="268.4697130712009">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>inputs</code></td><td>ConfigTypes.ConfigReserveInput[] calldata</td><td>See ConfigTypes library for detail.</td></tr></tbody></table>

### configureReserveAuction()[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#functionality) <a href="#functionality" id="functionality"></a>

**`function configureReserveAuction(uint256[] calldata reserveIds, uint256 liquidationBonus, uint256 auctionDuration, uint256 auctionPriceMultiple)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Configures reserve auction parameters for a list of reserveIds.

<table><thead><tr><th width="259.3333333333333">Parameter Name</th><th width="195.46971307120089">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>reserveIds</code></td><td>uint256[] calldata</td><td>ids of target reserves</td></tr><tr><td><code>liquidationBonus</code></td><td>uint256</td><td>bonus paid to auction stakeholders</td></tr><tr><td><code>auctionDuration</code></td><td>uint256</td><td>duration of the auction</td></tr><tr><td><code>auctionPriceMultiple</code></td><td>uint256</td><td>dutch auction start price multiplier</td></tr></tbody></table>

### setReserveMaxSupply()[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#functionality) <a href="#functionality" id="functionality"></a>

**`function setReserveMaxSupply(uint256[] calldata reserveIds, uint256 maxSupply)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Sets the max supply of NFTs that can be used as collateral within a list of reserves.

<table><thead><tr><th width="220.33333333333331">Parameter Name</th><th width="195.46971307120089">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>reserveIds</code></td><td>uint256[] calldata</td><td>ids of target reserves</td></tr><tr><td><code>maxSupply</code></td><td>uint256</td><td>max number of NFTs that can be used as collateral within the reserve</td></tr></tbody></table>

### setReserveCreatorAddress()[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#functionality) <a href="#functionality" id="functionality"></a>

**`function setReserveCreatorAddress(uint256 reserveId, address creator)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Sets the creator address for a reserve.

<table><thead><tr><th width="220.33333333333331">Parameter Name</th><th width="195.46971307120089">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>reserveId</code></td><td>uint256</td><td>ids of target reserves</td></tr><tr><td><code>creator</code></td><td>address</td><td>address to pay creator royalties</td></tr></tbody></table>

### setReserveCreatorPercentage()[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#functionality) <a href="#functionality" id="functionality"></a>

**`function setReserveCreatorPercentage(uint256 reserveId, uint256 percentage)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Sets the creator percentage of collection fees accrued to the protocol.

<table><thead><tr><th width="220.33333333333331">Parameter Name</th><th width="195.46971307120089">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>reserveId</code></td><td>uint256</td><td>ids of target reserves</td></tr><tr><td><code>percentage</code></td><td>uint256</td><td>percentage in 1e4, e.g. 5000 == 50%</td></tr></tbody></table>

### setMaxNumberOfReserves()[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#functionality) <a href="#functionality" id="functionality"></a>

**`function setMaxNumberOfReserves(uint256 newVal)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Sets the maximum number of reserves permitted within the protocol.

<table><thead><tr><th width="220.33333333333331">Parameter Name</th><th width="165.46971307120089">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>newVal</code></td><td>uint256</td><td>maximum number of reserves permitted</td></tr></tbody></table>

### setPoolPause()[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#functionality) <a href="#functionality" id="functionality"></a>

**`function setPoolPause(bool val)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Pauses / unpauses all actions of the protocol including fToken transfers. Only actionable by the emergency admin.

<table><thead><tr><th width="220.33333333333331">Parameter Name</th><th width="165.46971307120089">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>val</code></td><td>bool</td><td>true to pause, false to unpause</td></tr></tbody></table>

### setPoolPauseTime()[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#functionality) <a href="#functionality" id="functionality"></a>

**`function setPoolPauseTime(uint256 startTime, uint256 duration)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Pauses / unpauses all actions of the protocol including fToken transfers; at a given time, for a given duration. Only actionable by the emergency admin.

<table><thead><tr><th width="220.33333333333331">Parameter Name</th><th width="165.46971307120089">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>startTime</code></td><td>uint256</td><td>pause start time</td></tr><tr><td><code>duration</code></td><td>uint256</td><td>pause duration from the start time</td></tr></tbody></table>

### updateFToken()[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#functionality) <a href="#functionality" id="functionality"></a>

**`function updateFToken(ConfigTypes.UpdateFTokenInput[] calldata inputs)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Updates the fToken implementation for the reserve.

<table><thead><tr><th width="180.33333333333331">Parameter Name</th><th width="299.4697130712009">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>inputs</code></td><td>ConfigTypes.UpdateFTokenInput[] calldata</td><td>See ConfigTypes library for detail.</td></tr></tbody></table>

### updateStableDebtToken()[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#functionality) <a href="#functionality" id="functionality"></a>

**`function updateStableDebtToken(ConfigTypes.UpdateStableDebtTokenInput[] calldata inputs)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Updates the stableDebtToken implementation for the reserve.

<table><thead><tr><th width="180.33333333333331">Parameter Name</th><th width="299.4697130712009">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>inputs</code></td><td>ConfigTypes.UpdateStableDebtTokenInput[] calldata</td><td>See ConfigTypes library for detail.</td></tr></tbody></table>

### updateVariableDebtToken()[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#functionality) <a href="#functionality" id="functionality"></a>

**`function updateVariableDebtToken(ConfigTypes.UpdateVariableDebtTokenInput[] calldata inputs)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Updates the variableDebtToken implementation for the reserve.

<table><thead><tr><th width="180.33333333333331">Parameter Name</th><th width="299.4697130712009">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>inputs</code></td><td>ConfigTypes.UpdateVariableDebtTokenInput[] calldata</td><td>See ConfigTypes library for detail.</td></tr></tbody></table>

### approveExecutionDelegateContracts()[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#functionality) <a href="#functionality" id="functionality"></a>

**`function approveExecutionDelegateContracts(address[] calldata contracts)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Approves contracts to send/receive tokens on behalf of the execution delegate.

<table><thead><tr><th width="180.33333333333331">Parameter Name</th><th width="299.4697130712009">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>contracts</code></td><td>address[] calldata</td><td>addresses of contracts approved by the execution delegate</td></tr></tbody></table>

### approveWETHExecutionDelegate()[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#functionality) <a href="#functionality" id="functionality"></a>

**`function approveWETHExecutionDelegate()`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Approves the Execution Delegate contract to send/receive tokens on behalf of the WETH Gateway.

## View Methods

## ABI

<details>

<summary>Configurator ABI</summary>

```
{
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        }
      ],
      "name": "BorrowingDisabledOnReserve",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        }
      ],
      "name": "BorrowingEnabledOnReserve",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "collateral",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "proxy",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "DebtTokenUpgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "collateral",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "proxy",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "FTokenUpgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "maxNumberOfReserves",
          "type": "uint256"
        }
      ],
      "name": "MaxNumberOfReservesChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "method",
          "type": "string"
        }
      ],
      "name": "PriceConsumerAssetPriceMethodChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "method",
          "type": "string"
        }
      ],
      "name": "PriceConsumerNftPriceMethodChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        }
      ],
      "name": "ReserveActivated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "liquidationBonus",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "auctionDuration",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "auctionPriceMultiple",
          "type": "uint256"
        }
      ],
      "name": "ReserveAuctionChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "ltv",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "liquidationThreshold",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "liquidationBonus",
          "type": "uint256"
        }
      ],
      "name": "ReserveCollateralConfigurationChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        }
      ],
      "name": "ReserveDeactivated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "factor",
          "type": "uint256"
        }
      ],
      "name": "ReserveFactorChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        }
      ],
      "name": "ReserveFrozen",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "collateral",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "fToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "stableDebtToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "variableDebtToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "interestRateStrategyAddress",
          "type": "address"
        }
      ],
      "name": "ReserveInitialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "strategy",
          "type": "address"
        }
      ],
      "name": "ReserveInterestRateChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "maxSupply",
          "type": "uint256"
        }
      ],
      "name": "ReserveMaxSupplyChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "redeemThreshold",
          "type": "uint256"
        }
      ],
      "name": "ReserveRedeemThresholdChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        }
      ],
      "name": "ReserveUnfrozen",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        }
      ],
      "name": "VariableRateBorrowingDisabledOnReserve",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        }
      ],
      "name": "VariableRateBorrowingEnabledOnReserve",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "contracts",
          "type": "address[]"
        }
      ],
      "name": "approveExecutionDelegateContracts",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "approveWETHExecutionDelegate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "reserveFactor",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "ltv",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "decimals",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "gracePeriod",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "liquidationBonus",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "liquidationThreshold",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "auctionDuration",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "auctionPriceMultiple",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "borrowingEnabled",
              "type": "bool"
            }
          ],
          "internalType": "struct ConfigTypes.ConfigReserveInput[]",
          "name": "inputs",
          "type": "tuple[]"
        }
      ],
      "name": "batchConfigReserve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "underlyingCollateral",
              "type": "address"
            },
            {
              "internalType": "string",
              "name": "underlyingCollateralName",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "underlyingCollateralSymbol",
              "type": "string"
            },
            {
              "internalType": "uint256",
              "name": "underlyingMaxTokenId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "underlyingMinTokenId",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "underlyingAsset",
              "type": "address"
            },
            {
              "internalType": "string",
              "name": "underlyingAssetName",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "underlyingAssetSymbol",
              "type": "string"
            },
            {
              "internalType": "uint8",
              "name": "underlyingAssetDecimals",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "fTokenImpl",
              "type": "address"
            },
            {
              "internalType": "string",
              "name": "fTokenName",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "fTokenSymbol",
              "type": "string"
            },
            {
              "internalType": "address",
              "name": "stableDebtTokenImpl",
              "type": "address"
            },
            {
              "internalType": "string",
              "name": "stableDebtTokenName",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "stableDebtTokenSymbol",
              "type": "string"
            },
            {
              "internalType": "address",
              "name": "variableDebtTokenImpl",
              "type": "address"
            },
            {
              "internalType": "string",
              "name": "variableDebtTokenName",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "variableDebtTokenSymbol",
              "type": "string"
            },
            {
              "internalType": "address",
              "name": "interestRateStrategy",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "baseLTV",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "treasury",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "creator",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "creatorPercentage",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "auctionCallerPercentage",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "auctionCreatorPercentage",
              "type": "uint256"
            },
            {
              "internalType": "string",
              "name": "assetPriceFeed",
              "type": "string"
            }
          ],
          "internalType": "struct ConfigTypes.InitReserveInput[]",
          "name": "input",
          "type": "tuple[]"
        }
      ],
      "name": "batchInitLendingPoolReserve",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        },
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        },
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "reserveIds",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256",
          "name": "liquidationBonus",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "auctionDuration",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "auctionPriceMultiple",
          "type": "uint256"
        }
      ],
      "name": "configureReserveAuction",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "addressProvider",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "reserveIds",
          "type": "uint256[]"
        },
        {
          "internalType": "bool",
          "name": "flag",
          "type": "bool"
        }
      ],
      "name": "setActiveFlagOnReserve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "reserveIds",
          "type": "uint256[]"
        },
        {
          "internalType": "bool",
          "name": "flag",
          "type": "bool"
        }
      ],
      "name": "setBorrowingFlagOnReserve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "reserveIds",
          "type": "uint256[]"
        },
        {
          "internalType": "bool",
          "name": "flag",
          "type": "bool"
        }
      ],
      "name": "setFreezeFlagOnReserve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newVal",
          "type": "uint256"
        }
      ],
      "name": "setMaxNumberOfReserves",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "val",
          "type": "bool"
        }
      ],
      "name": "setPoolPause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "startTime",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "durationTime",
          "type": "uint256"
        }
      ],
      "name": "setPoolPausedTime",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "creator",
          "type": "address"
        }
      ],
      "name": "setReserveCreatorAddress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "percentage",
          "type": "uint256"
        }
      ],
      "name": "setReserveCreatorPercentage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "reserveIds",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256",
          "name": "reserveFactor",
          "type": "uint256"
        }
      ],
      "name": "setReserveFactor",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "reserveIds",
          "type": "uint256[]"
        },
        {
          "internalType": "address",
          "name": "rateAddress",
          "type": "address"
        }
      ],
      "name": "setReserveInterestRateAddress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "reserveIds",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256",
          "name": "maxSupply",
          "type": "uint256"
        }
      ],
      "name": "setReserveMaxSupply",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "reserveIds",
          "type": "uint256[]"
        },
        {
          "internalType": "bool",
          "name": "flag",
          "type": "bool"
        }
      ],
      "name": "setVariableRateBorrowingFlagOnReserve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "collateral",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "asset",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "implementation",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "encodedCallData",
              "type": "bytes"
            }
          ],
          "internalType": "struct ConfigTypes.UpdateFTokenInput[]",
          "name": "inputs",
          "type": "tuple[]"
        }
      ],
      "name": "updateFToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "collateral",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "asset",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "implementation",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "encodedCallData",
              "type": "bytes"
            }
          ],
          "internalType": "struct ConfigTypes.UpdateDebtTokenInput[]",
          "name": "inputs",
          "type": "tuple[]"
        }
      ],
      "name": "updateStableDebtToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "collateral",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "asset",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "implementation",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "encodedCallData",
              "type": "bytes"
            }
          ],
          "internalType": "struct ConfigTypes.UpdateDebtTokenInput[]",
          "name": "inputs",
          "type": "tuple[]"
        }
      ],
      "name": "updateVariableDebtToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x608060405234801561001057600080fd5b50613d9e806100206000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806380a4d93d116100b8578063c4d66de81161007c578063c4d66de814610268578063c739fd411461027b578063ceaedb9b1461028e578063d9db75ee146102a1578063e49c8a52146102b4578063f9e8cafa146102c757600080fd5b806380a4d93d1461020957806384636d4f1461021c578063a9c644011461022f578063bbce5cf314610242578063bfead1a41461025557600080fd5b80633c8db8b1116100ff5780633c8db8b1146101aa5780635b5b815e146101bd578063746c35a2146101d05780637641f3d9146101e35780637bb28860146101f657600080fd5b80630e3427891461013c57806312b4f1901461014657806314699c651461015957806329534299146101845780632d72e18e14610197575b600080fd5b6101446102da565b005b610144610154366004613176565b61045b565b61016c6101673660046131cc565b610618565b60405161017b93929190613251565b60405180910390f35b6101446101923660046131cc565b6108ed565b6101446101a5366004613294565b610a5b565b6101446101b83660046131cc565b610c09565b6101446101cb3660046132ef565b610d71565b6101446101de366004613342565b611016565b6101446101f136600461335b565b611210565b6101446102043660046132ef565b61132e565b6101446102173660046131cc565b6115e2565b61014461022a36600461337d565b6117b1565b61014461023d366004613294565b6118d7565b61014461025036600461339f565b611b21565b6101446102633660046132ef565b611c16565b6101446102763660046133cf565b611ebb565b6101446102893660046133ec565b611fe0565b61014461029c3660046131cc565b6124a5565b6101446102af366004613461565b61260d565b6101446102c236600461337d565b612876565b6101446102d53660046132ef565b612969565b603354604080516315d9b46f60e31b8152905133926001600160a01b03169163aecda3789160048083019260209291908290030181865afa158015610323573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034791906134c5565b6001600160a01b0316146040518060400160405280600381526020016203130360ec1b815250906103945760405162461bcd60e51b815260040161038b9190613506565b60405180910390fd5b50603354604080516377532ed960e01b815290516000926001600160a01b0316916377532ed99160048083019260209291908290030181865afa1580156103df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040391906134c5565b9050806001600160a01b031663caaabc606040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561044057600080fd5b505af1158015610454573d6000803e3d6000fd5b5050505050565b603354604080516315d9b46f60e31b8152905133926001600160a01b03169163aecda3789160048083019260209291908290030181865afa1580156104a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c891906134c5565b6001600160a01b0316146040518060400160405280600381526020016203130360ec1b8152509061050c5760405162461bcd60e51b815260040161038b9190613506565b506000610517612bf7565b905060005b8381101561045457816001600160a01b0316631932277586868481811061054557610545613539565b90506020020135856040518363ffffffff1660e01b815260040161057c9291909182526001600160a01b0316602082015260400190565b600060405180830381600087803b15801561059657600080fd5b505af11580156105aa573d6000803e3d6000fd5b505050508484828181106105c0576105c0613539565b6040516001600160a01b038716815260209182029390930135927ffe4461f34cf72b37179ac7dc6e66d7e91f10582c203cc08170ea5bf090983c0a92500160405180910390a2806106108161354f565b91505061051c565b603354604080516315d9b46f60e31b815290516060928392839233926001600160a01b03169163aecda3789160048083019260209291908290030181865afa158015610668573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068c91906134c5565b6001600160a01b0316146040518060400160405280600381526020016203130360ec1b815250906106d05760405162461bcd60e51b815260040161038b9190613506565b506000846001600160401b038111156106eb576106eb613576565b604051908082528060200260200182016040528015610714578160200160208202803683370190505b5090506000856001600160401b0381111561073157610731613576565b60405190808252806020026020018201604052801561075a578160200160208202803683370190505b5090506000866001600160401b0381111561077757610777613576565b6040519080825280602002602001820160405280156107a0578160200160208202803683370190505b50905060006107ad612bf7565b905060005b888110156108de5760335473__$0fe017e20684fbd032f923e9d615f3d00e$__9063a1086fed906001600160a01b0316848d8d868181106107f5576107f5613539565b9050602002810190610807919061358c565b6040518463ffffffff1660e01b81526004016108259392919061362c565b606060405180830381865af4158015610842573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086691906139aa565b87848151811061087857610878613539565b6020026020010187858151811061089157610891613539565b602002602001018786815181106108aa576108aa613539565b6001600160a01b039485166020918202929092010152928216909252919091169052806108d68161354f565b9150506107b2565b50929891975095509350505050565b603354604080516315d9b46f60e31b8152905133926001600160a01b03169163aecda3789160048083019260209291908290030181865afa158015610936573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095a91906134c5565b6001600160a01b0316146040518060400160405280600381526020016203130360ec1b8152509061099e5760405162461bcd60e51b815260040161038b9190613506565b5060006109a9612bf7565b905060005b82811015610a555773__$0fe017e20684fbd032f923e9d615f3d00e$__63d6979abe838686858181106109e3576109e3613539565b90506020028101906109f591906139ec565b6040518363ffffffff1660e01b8152600401610a12929190613a7d565b60006040518083038186803b158015610a2a57600080fd5b505af4158015610a3e573d6000803e3d6000fd5b505050508080610a4d9061354f565b9150506109ae565b50505050565b603354604080516315d9b46f60e31b8152905133926001600160a01b03169163aecda3789160048083019260209291908290030181865afa158015610aa4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac891906134c5565b6001600160a01b0316146040518060400160405280600381526020016203130360ec1b81525090610b0c5760405162461bcd60e51b815260040161038b9190613506565b506000610b17612bf7565b905060005b8381101561045457816001600160a01b031663d6ee0f73868684818110610b4557610b45613539565b90506020020135856040518363ffffffff1660e01b8152600401610b73929190918252602082015260400190565b600060405180830381600087803b158015610b8d57600080fd5b505af1158015610ba1573d6000803e3d6000fd5b50505050848482818110610bb757610bb7613539565b905060200201357fb5be071c2a981f4f4236982ec3bf0fcdb1a9b1471de2be1a7e78529eddd1f49e84604051610bef91815260200190565b60405180910390a280610c018161354f565b915050610b1c565b603354604080516315d9b46f60e31b8152905133926001600160a01b03169163aecda3789160048083019260209291908290030181865afa158015610c52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7691906134c5565b6001600160a01b0316146040518060400160405280600381526020016203130360ec1b81525090610cba5760405162461bcd60e51b815260040161038b9190613506565b506000610cc5612bf7565b905060005b82811015610a555773__$0fe017e20684fbd032f923e9d615f3d00e$__63a94cd28d83868685818110610cff57610cff613539565b9050602002810190610d1191906139ec565b6040518363ffffffff1660e01b8152600401610d2e929190613a7d565b60006040518083038186803b158015610d4657600080fd5b505af4158015610d5a573d6000803e3d6000fd5b505050508080610d699061354f565b915050610cca565b603354604080516315d9b46f60e31b8152905133926001600160a01b03169163aecda3789160048083019260209291908290030181865afa158015610dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dde91906134c5565b6001600160a01b0316146040518060400160405280600381526020016203130360ec1b81525090610e225760405162461bcd60e51b815260040161038b9190613506565b506000610e2d612bf7565b905060005b83811015610454576000826001600160a01b031663eadff055878785818110610e5d57610e5d613539565b905060200201356040518263ffffffff1660e01b8152600401610e8291815260200190565b6020604051808303816000875af1158015610ea1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec59190613b13565b90508315610edd57610ed8816001612c6a565b610ee8565b610ee8816000612c6a565b826001600160a01b03166389a7245d878785818110610f0957610f09613539565b9050602002013583600001516040518363ffffffff1660e01b8152600401610f3b929190918252602082015260400190565b600060405180830381600087803b158015610f5557600080fd5b505af1158015610f69573d6000803e3d6000fd5b505050508315610fbd57858583818110610f8557610f85613539565b905060200201357ff110ac45454fea6974019bce0132b7e85f3247dc7d147b3afbf3979c64d45ef460405160405180910390a2611003565b858583818110610fcf57610fcf613539565b905060200201357feed17fae9c8c79df92a8a28c129668d097f5c55c4cc4ea42d2d618c0fda8af8a60405160405180910390a25b508061100e8161354f565b915050610e32565b603354604080516315d9b46f60e31b8152905133926001600160a01b03169163aecda3789160048083019260209291908290030181865afa15801561105f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108391906134c5565b6001600160a01b0316146040518060400160405280600381526020016203130360ec1b815250906110c75760405162461bcd60e51b815260040161038b9190613506565b5060006110d2612bf7565b90506000816001600160a01b03166308ac08b96040518163ffffffff1660e01b8152600401602060405180830381865afa158015611114573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111389190613b2f565b90508083116040518060400160405280600381526020016237303160e81b815250906111775760405162461bcd60e51b815260040161038b9190613506565b50604051633a361ad160e11b8152600481018490526001600160a01b0383169063746c35a290602401600060405180830381600087803b1580156111ba57600080fd5b505af11580156111ce573d6000803e3d6000fd5b505050507f2326a0df34db769e143ca92ed7e2cd69db0263ec9604411030cbe62da6f62b218360405161120391815260200190565b60405180910390a1505050565b60335460408051636ee554f560e11b8152905133926001600160a01b03169163ddcaa9ea9160048083019260209291908290030181865afa158015611259573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127d91906134c5565b6001600160a01b031614604051806040016040528060038152602001621b981960e91b815250906112c15760405162461bcd60e51b815260040161038b9190613506565b5060006112cc612bf7565b60405163bedb86fb60e01b815283151560048201529091506001600160a01b0382169063bedb86fb90602401600060405180830381600087803b15801561131257600080fd5b505af1158015611326573d6000803e3d6000fd5b505050505050565b603354604080516315d9b46f60e31b8152905133926001600160a01b03169163aecda3789160048083019260209291908290030181865afa158015611377573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139b91906134c5565b6001600160a01b0316146040518060400160405280600381526020016203130360ec1b815250906113df5760405162461bcd60e51b815260040161038b9190613506565b5060006113ea612bf7565b905060005b83811015610454576000826001600160a01b031663eadff05587878581811061141a5761141a613539565b905060200201356040518263ffffffff1660e01b815260040161143f91815260200190565b6020604051808303816000875af115801561145e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114829190613b13565b9050836114aa576114aa86868481811061149e5761149e613539565b90506020020135612c98565b6114b48185612de4565b826001600160a01b03166389a7245d8787858181106114d5576114d5613539565b9050602002013583600001516040518363ffffffff1660e01b8152600401611507929190918252602082015260400190565b600060405180830381600087803b15801561152157600080fd5b505af1158015611535573d6000803e3d6000fd5b5050505083156115895785858381811061155157611551613539565b905060200201357f1603fabc6ecfe8a2406f0d0a45592fff62c0c6875901cf35d8a091c74cc08b9a60405160405180910390a26115cf565b85858381811061159b5761159b613539565b905060200201357f8062272b11576c2818b72b2017028f551699cd48fb41767885eb72d18e44dbb260405160405180910390a25b50806115da8161354f565b9150506113ef565b603354604080516315d9b46f60e31b8152905133926001600160a01b03169163aecda3789160048083019260209291908290030181865afa15801561162b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164f91906134c5565b6001600160a01b0316146040518060400160405280600381526020016203130360ec1b815250906116935760405162461bcd60e51b815260040161038b9190613506565b50603354604080516347f872f160e01b815290516000926001600160a01b0316916347f872f19160048083019260209291908290030181865afa1580156116de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170291906134c5565b905060005b82811015610a5557816001600160a01b03166307f7aafb85858481811061173057611730613539565b905060200201602081019061174591906133cf565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b15801561178657600080fd5b505af115801561179a573d6000803e3d6000fd5b5050505080806117a99061354f565b915050611707565b60335460408051636ee554f560e11b8152905133926001600160a01b03169163ddcaa9ea9160048083019260209291908290030181865afa1580156117fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181e91906134c5565b6001600160a01b031614604051806040016040528060038152602001621b981960e91b815250906118625760405162461bcd60e51b815260040161038b9190613506565b50600061186d612bf7565b604051632f923ff760e01b815260048101859052602481018490529091506001600160a01b03821690632f923ff7906044015b600060405180830381600087803b1580156118ba57600080fd5b505af11580156118ce573d6000803e3d6000fd5b50505050505050565b603354604080516315d9b46f60e31b8152905133926001600160a01b03169163aecda3789160048083019260209291908290030181865afa158015611920573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194491906134c5565b6001600160a01b0316146040518060400160405280600381526020016203130360ec1b815250906119885760405162461bcd60e51b815260040161038b9190613506565b506000611993612bf7565b905060005b83811015610454576000826001600160a01b031663eadff0558787858181106119c3576119c3613539565b905060200201356040518263ffffffff1660e01b81526004016119e891815260200190565b6020604051808303816000875af1158015611a07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2b9190613b13565b9050611a378185612e12565b826001600160a01b03166389a7245d878785818110611a5857611a58613539565b9050602002013583600001516040518363ffffffff1660e01b8152600401611a8a929190918252602082015260400190565b600060405180830381600087803b158015611aa457600080fd5b505af1158015611ab8573d6000803e3d6000fd5b50505050858583818110611ace57611ace613539565b905060200201357fa0d3e805ee1d3e2ede42facb6a56b605599f8e40d6c55fa36498cd68fbc3c81885604051611b0691815260200190565b60405180910390a25080611b198161354f565b915050611998565b603354604080516315d9b46f60e31b8152905133926001600160a01b03169163aecda3789160048083019260209291908290030181865afa158015611b6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8e91906134c5565b6001600160a01b0316146040518060400160405280600381526020016203130360ec1b81525090611bd25760405162461bcd60e51b815260040161038b9190613506565b506000611bdd612bf7565b60405163bbce5cf360e01b8152600481018590526001600160a01b0384811660248301529192509082169063bbce5cf3906044016118a0565b603354604080516315d9b46f60e31b8152905133926001600160a01b03169163aecda3789160048083019260209291908290030181865afa158015611c5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8391906134c5565b6001600160a01b0316146040518060400160405280600381526020016203130360ec1b81525090611cc75760405162461bcd60e51b815260040161038b9190613506565b506000611cd2612bf7565b905060005b83811015610454576000826001600160a01b031663eadff055878785818110611d0257611d02613539565b905060200201356040518263ffffffff1660e01b8152600401611d2791815260200190565b6020604051808303816000875af1158015611d46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6a9190613b13565b90508315611d8257611d7d816001612e6a565b611d8d565b611d8d816000612e6a565b826001600160a01b03166389a7245d878785818110611dae57611dae613539565b9050602002013583600001516040518363ffffffff1660e01b8152600401611de0929190918252602082015260400190565b600060405180830381600087803b158015611dfa57600080fd5b505af1158015611e0e573d6000803e3d6000fd5b505050508315611e6257858583818110611e2a57611e2a613539565b905060200201357fe0850c0895ec100425343341b0fe939b37776e188c991c2a14f3489a8207c73760405160405180910390a2611ea8565b858583818110611e7457611e74613539565b905060200201357f94676996b7d3838859708eff3c1f5a3dab2a43dfbff6399e14041d4b989df6ba60405160405180910390a25b5080611eb38161354f565b915050611cd7565b600054610100900460ff1615808015611edb5750600054600160ff909116105b80611ef55750303b158015611ef5575060005460ff166001145b611f585760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161038b565b6000805460ff191660011790558015611f7b576000805461ff0019166101001790555b603380546001600160a01b0319166001600160a01b0384161790558015611fdc576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b603354604080516315d9b46f60e31b8152905133926001600160a01b03169163aecda3789160048083019260209291908290030181865afa158015612029573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204d91906134c5565b6001600160a01b0316146040518060400160405280600381526020016203130360ec1b815250906120915760405162461bcd60e51b815260040161038b9190613506565b50600061209c612bf7565b905060005b82811015610a55576000826001600160a01b031663eadff0558686858181106120cc576120cc613539565b90506101400201600001356040518263ffffffff1660e01b81526004016120f591815260200190565b6020604051808303816000875af1158015612114573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121389190613b13565b905084848381811061214c5761214c613539565b9050610140020160c0013585858481811061216957612169613539565b905061014002016040013511156040518060400160405280600381526020016237303160e81b815250906121b05760405162461bcd60e51b815260040161038b9190613506565b508484838181106121c3576121c3613539565b9050610140020160c00135600014612237576127108585848181106121ea576121ea613539565b9050610140020160a0013511156040518060400160405280600381526020016237303160e81b815250906122315760405162461bcd60e51b815260040161038b9190613506565b50612293565b84848381811061224957612249613539565b9050610140020160a001356000146040518060400160405280600381526020016237303160e81b815250906122915760405162461bcd60e51b815260040161038b9190613506565b505b6122c28585848181106122a8576122a8613539565b905061014002016020013582612e1290919063ffffffff16565b6122f18585848181106122d7576122d7613539565b905061014002016040013582612e9890919063ffffffff16565b61232085858481811061230657612306613539565b905061014002016060013582612ee290919063ffffffff16565b61234f85858481811061233557612335613539565b905061014002016080013582612f3690919063ffffffff16565b61237e85858481811061236457612364613539565b9050610140020160a0013582612f8990919063ffffffff16565b6123ad85858481811061239357612393613539565b9050610140020160c0013582612fdd90919063ffffffff16565b6123dc8585848181106123c2576123c2613539565b9050610140020160e001358261302f90919063ffffffff16565b61240c8585848181106123f1576123f1613539565b9050610140020161010001358261308290919063ffffffff16565b826001600160a01b03166389a7245d86868581811061242d5761242d613539565b85516040516001600160e01b031960e087901b16815261014090920293909301356004820152602481019290925250604401600060405180830381600087803b15801561247957600080fd5b505af115801561248d573d6000803e3d6000fd5b5050505050808061249d9061354f565b9150506120a1565b603354604080516315d9b46f60e31b8152905133926001600160a01b03169163aecda3789160048083019260209291908290030181865afa1580156124ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251291906134c5565b6001600160a01b0316146040518060400160405280600381526020016203130360ec1b815250906125565760405162461bcd60e51b815260040161038b9190613506565b506000612561612bf7565b905060005b82811015610a555773__$0fe017e20684fbd032f923e9d615f3d00e$__63f943de388386868581811061259b5761259b613539565b90506020028101906125ad91906139ec565b6040518363ffffffff1660e01b81526004016125ca929190613a7d565b60006040518083038186803b1580156125e257600080fd5b505af41580156125f6573d6000803e3d6000fd5b5050505080806126059061354f565b915050612566565b603354604080516315d9b46f60e31b8152905133926001600160a01b03169163aecda3789160048083019260209291908290030181865afa158015612656573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267a91906134c5565b6001600160a01b0316146040518060400160405280600381526020016203130360ec1b815250906126be5760405162461bcd60e51b815260040161038b9190613506565b5060006126c9612bf7565b905060005b858110156118ce576000826001600160a01b031663eadff0558989858181106126f9576126f9613539565b905060200201356040518263ffffffff1660e01b815260040161271e91815260200190565b6020604051808303816000875af115801561273d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127619190613b13565b905061276d8187612f89565b612777818661302f565b6127818185613082565b826001600160a01b03166389a7245d8989858181106127a2576127a2613539565b9050602002013583600001516040518363ffffffff1660e01b81526004016127d4929190918252602082015260400190565b600060405180830381600087803b1580156127ee57600080fd5b505af1158015612802573d6000803e3d6000fd5b5050505087878381811061281857612818613539565b604080518a815260208181018b905291810189905291029290920135917f8e1b436e42bffc00dac953e4d4d5f688702e3e24b901bdaebf13d6e8f9046dde915060600160405180910390a2508061286e8161354f565b9150506126ce565b603354604080516315d9b46f60e31b8152905133926001600160a01b03169163aecda3789160048083019260209291908290030181865afa1580156128bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e391906134c5565b6001600160a01b0316146040518060400160405280600381526020016203130360ec1b815250906129275760405162461bcd60e51b815260040161038b9190613506565b506000612932612bf7565b60405163724e452960e11b815260048101859052602481018490529091506001600160a01b0382169063e49c8a52906044016118a0565b603354604080516315d9b46f60e31b8152905133926001600160a01b03169163aecda3789160048083019260209291908290030181865afa1580156129b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d691906134c5565b6001600160a01b0316146040518060400160405280600381526020016203130360ec1b81525090612a1a5760405162461bcd60e51b815260040161038b9190613506565b506000612a25612bf7565b905060005b83811015610454576000826001600160a01b031663eadff055878785818110612a5557612a55613539565b905060200201356040518263ffffffff1660e01b8152600401612a7a91815260200190565b6020604051808303816000875af1158015612a99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612abd9190613b13565b9050612ac981856130d5565b826001600160a01b03166389a7245d878785818110612aea57612aea613539565b9050602002013583600001516040518363ffffffff1660e01b8152600401612b1c929190918252602082015260400190565b600060405180830381600087803b158015612b3657600080fd5b505af1158015612b4a573d6000803e3d6000fd5b505050508315612b9e57858583818110612b6657612b66613539565b905060200201357f635c7b10ea9d592b3b5eef7ce7bda26b5e37eafc305f2c496ecbe4131c481fef60405160405180910390a2612be4565b858583818110612bb057612bb0613539565b905060200201357fc9b9ee8e2ea2d94533a409277610db94f7c5139a2159305e03a25f04bd54e15560405160405180910390a25b5080612bef8161354f565b915050612a2a565b60335460408051630261bf8b60e01b815290516000926001600160a01b031691630261bf8b9160048083019260209291908290030181865afa158015612c41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c6591906134c5565b905090565b603a81612c78576000612c7b565b60015b8351670400000000000000191660ff9190911690911b1790915250565b6000612ca2612bf7565b6001600160a01b03166377778db3836040518263ffffffff1660e01b8152600401612ccf91815260200190565b600060405180830381865afa158015612cec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612d149190810190613bf1565b604080820151606083015191516370a0823160e01b81526001600160a01b0392831660048201529293506000929116906370a0823190602401602060405180830381865afa158015612d6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d8e9190613b2f565b905080158015612daa57506101c08201516001600160801b0316155b6040518060400160405280600381526020016203730360ec1b81525090610a555760405162461bcd60e51b815260040161038b9190613506565b603881612df2576000612df5565b60015b8351670100000000000000191660ff9190911690911b1790915250565b6040805180820190915260038152620dcccd60ea1b602082015261ffff821115612e4f5760405162461bcd60e51b815260040161038b9190613506565b50815169ffff0000000000000000191660409190911b179052565b603b81612e78576000612e7b565b60015b8351670800000000000000191660ff9190911690911b1790915250565b60408051808201909152600381526203733360ec1b602082015261ffff821115612ed55760405162461bcd60e51b815260040161038b9190613506565b50815161ffff1916179052565b60408051808201909152600381526237333360e81b602082015260ff821115612f1e5760405162461bcd60e51b815260040161038b9190613506565b50815166ff000000000000191660309190911b179052565b60408051808201909152600381526237333960e81b602082015261ffff821115612f735760405162461bcd60e51b815260040161038b9190613506565b50815161ffff60501b191660509190911b179052565b6040805180820190915260038152621b999960e91b602082015261ffff821115612fc65760405162461bcd60e51b815260040161038b9190613506565b50815165ffff00000000191660209190911b179052565b60408051808201909152600381526237333160e81b602082015261ffff82111561301a5760405162461bcd60e51b815260040161038b9190613506565b50815163ffff0000191660109190911b179052565b60408051808201909152600381526203734360ec1b602082015261ffff82111561306c5760405162461bcd60e51b815260040161038b9190613506565b50815161ffff60601b191660609190911b179052565b60408051808201909152600381526237343160e81b602082015261ffff8211156130bf5760405162461bcd60e51b815260040161038b9190613506565b50815161ffff60701b191660709190911b179052565b6039816130e35760006130e6565b60015b8351670200000000000000191660ff9190911690911b1790915250565b60008083601f84011261311557600080fd5b5081356001600160401b0381111561312c57600080fd5b6020830191508360208260051b850101111561314757600080fd5b9250929050565b6001600160a01b038116811461316357600080fd5b50565b80356131718161314e565b919050565b60008060006040848603121561318b57600080fd5b83356001600160401b038111156131a157600080fd5b6131ad86828701613103565b90945092505060208401356131c18161314e565b809150509250925092565b600080602083850312156131df57600080fd5b82356001600160401b038111156131f557600080fd5b61320185828601613103565b90969095509350505050565b600081518084526020808501945080840160005b838110156132465781516001600160a01b031687529582019590820190600101613221565b509495945050505050565b606081526000613264606083018661320d565b8281036020840152613276818661320d565b9050828103604084015261328a818561320d565b9695505050505050565b6000806000604084860312156132a957600080fd5b83356001600160401b038111156132bf57600080fd5b6132cb86828701613103565b909790965060209590950135949350505050565b8035801515811461317157600080fd5b60008060006040848603121561330457600080fd5b83356001600160401b0381111561331a57600080fd5b61332686828701613103565b90945092506133399050602085016132df565b90509250925092565b60006020828403121561335457600080fd5b5035919050565b60006020828403121561336d57600080fd5b613376826132df565b9392505050565b6000806040838503121561339057600080fd5b50508035926020909101359150565b600080604083850312156133b257600080fd5b8235915060208301356133c48161314e565b809150509250929050565b6000602082840312156133e157600080fd5b81356133768161314e565b600080602083850312156133ff57600080fd5b82356001600160401b038082111561341657600080fd5b818501915085601f83011261342a57600080fd5b81358181111561343957600080fd5b8660206101408302850101111561344f57600080fd5b60209290920196919550909350505050565b60008060008060006080868803121561347957600080fd5b85356001600160401b0381111561348f57600080fd5b61349b88828901613103565b9099909850602088013597604081013597506060013595509350505050565b80516131718161314e565b6000602082840312156134d757600080fd5b81516133768161314e565b60005b838110156134fd5781810151838201526020016134e5565b50506000910152565b60208152600082518060208401526135258160408501602087016134e2565b601f01601f19169190910160400192915050565b634e487b7160e01b600052603260045260246000fd5b60006001820161356f57634e487b7160e01b600052601160045260246000fd5b5060010190565b634e487b7160e01b600052604160045260246000fd5b6000823561033e198336030181126135a357600080fd5b9190910192915050565b6000808335601e198436030181126135c457600080fd5b83016020810192503590506001600160401b038111156135e357600080fd5b80360382131561314757600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b803560ff8116811461317157600080fd5b6001600160a01b0384811682528316602082015260606040820181905260009061366890830161365b85613166565b6001600160a01b03169052565b61367560208401846135ad565b61034080608086015261368d6103a0860183856135f2565b925061369c60408701876135ad565b9250605f19808786030160a08801526136b68585846135f2565b9450606088013560c0880152608088013560e08801526136d860a08901613166565b935061010091506136f3828801856001600160a01b03169052565b61370060c08901896135ad565b94506101208289880301818a01526137198787846135f2565b965061372860e08b018b6135ad565b96509150610140838a890301818b01526137438888856135f2565b9750613750858c0161361b565b96506101609450613765858b018860ff169052565b613770828c01613166565b9650610180925061378b838b01886001600160a01b03169052565b613797818c018c6135ad565b97509150506101a0838a890301818b01526137b38888846135f2565b97506137c1858c018c6135ad565b975094506101c09150838a890301828b01526137de8888876135f2565b97506137eb838c01613166565b96506101e09450613806858b01886001600160a01b03169052565b613812818c018c6135ad565b9750925050610200838a890301818b015261382e8888856135f2565b975061383c828c018c6135ad565b975092506102209150838a890301828b01526138598888856135f2565b9750613866858c01613166565b96506102409450613881858b01886001600160a01b03169052565b61388d818c018c6135ad565b9750925050610260838a890301818b01526138a98888856135f2565b97506138b7828c018c6135ad565b975092506102809150838a890301828b01526138d48888856135f2565b97506138e1858c01613166565b96506102a094506138fc858b01886001600160a01b03169052565b6102c09650808b0135878b015250613915818b01613166565b9150506102e061392f818a01836001600160a01b03169052565b61393a848b01613166565b93506103009150613955828a01856001600160a01b03169052565b6103209350858a0135848a0152808a0135858a0152508089013561036089015250613982828901896135ad565b945092508087860301610380880152505061399e8383836135f2565b98975050505050505050565b6000806000606084860312156139bf57600080fd5b83516139ca8161314e565b60208501519093506139db8161314e565b60408501519092506131c18161314e565b60008235609e198336030181126135a357600080fd5b60008135613a0f8161314e565b6001600160a01b039081168452602083013590613a2b8261314e565b9081166020850152604083013590613a428261314e565b16604084015260608281013590840152613a5f60808301836135ad565b60a06080860152613a7460a0860182846135f2565b95945050505050565b6001600160a01b0383168152604060208201819052600090613aa190830184613a02565b949350505050565b60405161022081016001600160401b0381118282101715613acc57613acc613576565b60405290565b600060208284031215613ae457600080fd5b604051602081018181106001600160401b0382111715613b0657613b06613576565b6040529151825250919050565b600060208284031215613b2557600080fd5b6133768383613ad2565b600060208284031215613b4157600080fd5b5051919050565b600082601f830112613b5957600080fd5b81516001600160401b0380821115613b7357613b73613576565b604051601f8301601f19908116603f01168101908282118183101715613b9b57613b9b613576565b81604052838152866020858801011115613bb457600080fd5b61328a8460208301602089016134e2565b80516001600160801b038116811461317157600080fd5b805164ffffffffff8116811461317157600080fd5b600060208284031215613c0357600080fd5b81516001600160401b0380821115613c1a57600080fd5b908301906102208286031215613c2f57600080fd5b613c37613aa9565b613c418684613ad2565b8152613c4f602084016134ba565b6020820152613c60604084016134ba565b6040820152613c71606084016134ba565b6060820152613c82608084016134ba565b6080820152613c9360a084016134ba565b60a0820152613ca460c084016134ba565b60c082015260e083015182811115613cbb57600080fd5b613cc787828601613b48565b60e08301525061010083810151908201526101208084015190820152610140808401519082015261016080840151908201526101809150613d09828401613bc5565b828201526101a09150613d1d828401613bc5565b828201526101c09150613d31828401613bc5565b828201526101e09150613d45828401613bc5565b828201526102009150613d59828401613bdc565b9181019190915294935050505056fea2646970667358221220443c707800b1d1402f5c079794c5cf0abacadaa4af2e15b507ef55675933de3264736f6c63430008100033",
    "sourceMap": "1621:14220:132:-:0;;;;;;;;;;;;;;;;;;;",
    "linkReferences": {
      "src/protocol/libraries/logic/ConfiguratorLogic.sol": {
        "ConfiguratorLogic": [
          {
            "start": 2015,
            "length": 20
          },
          {
            "start": 2520,
            "length": 20
          },
          {
            "start": 3316,
            "length": 20
          },
          {
            "start": 9616,
            "length": 20
          }
        ]
      }
    }
  },
  "deployedBytecode": {
    "object": "0x608060405234801561001057600080fd5b50600436106101375760003560e01c806380a4d93d116100b8578063c4d66de81161007c578063c4d66de814610268578063c739fd411461027b578063ceaedb9b1461028e578063d9db75ee146102a1578063e49c8a52146102b4578063f9e8cafa146102c757600080fd5b806380a4d93d1461020957806384636d4f1461021c578063a9c644011461022f578063bbce5cf314610242578063bfead1a41461025557600080fd5b80633c8db8b1116100ff5780633c8db8b1146101aa5780635b5b815e146101bd578063746c35a2146101d05780637641f3d9146101e35780637bb28860146101f657600080fd5b80630e3427891461013c57806312b4f1901461014657806314699c651461015957806329534299146101845780632d72e18e14610197575b600080fd5b6101446102da565b005b610144610154366004613176565b61045b565b61016c6101673660046131cc565b610618565b60405161017b93929190613251565b60405180910390f35b6101446101923660046131cc565b6108ed565b6101446101a5366004613294565b610a5b565b6101446101b83660046131cc565b610c09565b6101446101cb3660046132ef565b610d71565b6101446101de366004613342565b611016565b6101446101f136600461335b565b611210565b6101446102043660046132ef565b61132e565b6101446102173660046131cc565b6115e2565b61014461022a36600461337d565b6117b1565b61014461023d366004613294565b6118d7565b61014461025036600461339f565b611b21565b6101446102633660046132ef565b611c16565b6101446102763660046133cf565b611ebb565b6101446102893660046133ec565b611fe0565b61014461029c3660046131cc565b6124a5565b6101446102af366004613461565b61260d565b6101446102c236600461337d565b612876565b6101446102d53660046132ef565b612969565b603354604080516315d9b46f60e31b8152905133926001600160a01b03169163aecda3789160048083019260209291908290030181865afa158015610323573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034791906134c5565b6001600160a01b0316146040518060400160405280600381526020016203130360ec1b815250906103945760405162461bcd60e51b815260040161038b9190613506565b60405180910390fd5b50603354604080516377532ed960e01b815290516000926001600160a01b0316916377532ed99160048083019260209291908290030181865afa1580156103df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040391906134c5565b9050806001600160a01b031663caaabc606040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561044057600080fd5b505af1158015610454573d6000803e3d6000fd5b5050505050565b603354604080516315d9b46f60e31b8152905133926001600160a01b03169163aecda3789160048083019260209291908290030181865afa1580156104a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c891906134c5565b6001600160a01b0316146040518060400160405280600381526020016203130360ec1b8152509061050c5760405162461bcd60e51b815260040161038b9190613506565b506000610517612bf7565b905060005b8381101561045457816001600160a01b0316631932277586868481811061054557610545613539565b90506020020135856040518363ffffffff1660e01b815260040161057c9291909182526001600160a01b0316602082015260400190565b600060405180830381600087803b15801561059657600080fd5b505af11580156105aa573d6000803e3d6000fd5b505050508484828181106105c0576105c0613539565b6040516001600160a01b038716815260209182029390930135927ffe4461f34cf72b37179ac7dc6e66d7e91f10582c203cc08170ea5bf090983c0a92500160405180910390a2806106108161354f565b91505061051c565b603354604080516315d9b46f60e31b815290516060928392839233926001600160a01b03169163aecda3789160048083019260209291908290030181865afa158015610668573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068c91906134c5565b6001600160a01b0316146040518060400160405280600381526020016203130360ec1b815250906106d05760405162461bcd60e51b815260040161038b9190613506565b506000846001600160401b038111156106eb576106eb613576565b604051908082528060200260200182016040528015610714578160200160208202803683370190505b5090506000856001600160401b0381111561073157610731613576565b60405190808252806020026020018201604052801561075a578160200160208202803683370190505b5090506000866001600160401b0381111561077757610777613576565b6040519080825280602002602001820160405280156107a0578160200160208202803683370190505b50905060006107ad612bf7565b905060005b888110156108de5760335473__$0fe017e20684fbd032f923e9d615f3d00e$__9063a1086fed906001600160a01b0316848d8d868181106107f5576107f5613539565b9050602002810190610807919061358c565b6040518463ffffffff1660e01b81526004016108259392919061362c565b606060405180830381865af4158015610842573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086691906139aa565b87848151811061087857610878613539565b6020026020010187858151811061089157610891613539565b602002602001018786815181106108aa576108aa613539565b6001600160a01b039485166020918202929092010152928216909252919091169052806108d68161354f565b9150506107b2565b50929891975095509350505050565b603354604080516315d9b46f60e31b8152905133926001600160a01b03169163aecda3789160048083019260209291908290030181865afa158015610936573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095a91906134c5565b6001600160a01b0316146040518060400160405280600381526020016203130360ec1b8152509061099e5760405162461bcd60e51b815260040161038b9190613506565b5060006109a9612bf7565b905060005b82811015610a555773__$0fe017e20684fbd032f923e9d615f3d00e$__63d6979abe838686858181106109e3576109e3613539565b90506020028101906109f591906139ec565b6040518363ffffffff1660e01b8152600401610a12929190613a7d565b60006040518083038186803b158015610a2a57600080fd5b505af4158015610a3e573d6000803e3d6000fd5b505050508080610a4d9061354f565b9150506109ae565b50505050565b603354604080516315d9b46f60e31b8152905133926001600160a01b03169163aecda3789160048083019260209291908290030181865afa158015610aa4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac891906134c5565b6001600160a01b0316146040518060400160405280600381526020016203130360ec1b81525090610b0c5760405162461bcd60e51b815260040161038b9190613506565b506000610b17612bf7565b905060005b8381101561045457816001600160a01b031663d6ee0f73868684818110610b4557610b45613539565b90506020020135856040518363ffffffff1660e01b8152600401610b73929190918252602082015260400190565b600060405180830381600087803b158015610b8d57600080fd5b505af1158015610ba1573d6000803e3d6000fd5b50505050848482818110610bb757610bb7613539565b905060200201357fb5be071c2a981f4f4236982ec3bf0fcdb1a9b1471de2be1a7e78529eddd1f49e84604051610bef91815260200190565b60405180910390a280610c018161354f565b915050610b1c565b603354604080516315d9b46f60e31b8152905133926001600160a01b03169163aecda3789160048083019260209291908290030181865afa158015610c52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7691906134c5565b6001600160a01b0316146040518060400160405280600381526020016203130360ec1b81525090610cba5760405162461bcd60e51b815260040161038b9190613506565b506000610cc5612bf7565b905060005b82811015610a555773__$0fe017e20684fbd032f923e9d615f3d00e$__63a94cd28d83868685818110610cff57610cff613539565b9050602002810190610d1191906139ec565b6040518363ffffffff1660e01b8152600401610d2e929190613a7d565b60006040518083038186803b158015610d4657600080fd5b505af4158015610d5a573d6000803e3d6000fd5b505050508080610d699061354f565b915050610cca565b603354604080516315d9b46f60e31b8152905133926001600160a01b03169163aecda3789160048083019260209291908290030181865afa158015610dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dde91906134c5565b6001600160a01b0316146040518060400160405280600381526020016203130360ec1b81525090610e225760405162461bcd60e51b815260040161038b9190613506565b506000610e2d612bf7565b905060005b83811015610454576000826001600160a01b031663eadff055878785818110610e5d57610e5d613539565b905060200201356040518263ffffffff1660e01b8152600401610e8291815260200190565b6020604051808303816000875af1158015610ea1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec59190613b13565b90508315610edd57610ed8816001612c6a565b610ee8565b610ee8816000612c6a565b826001600160a01b03166389a7245d878785818110610f0957610f09613539565b9050602002013583600001516040518363ffffffff1660e01b8152600401610f3b929190918252602082015260400190565b600060405180830381600087803b158015610f5557600080fd5b505af1158015610f69573d6000803e3d6000fd5b505050508315610fbd57858583818110610f8557610f85613539565b905060200201357ff110ac45454fea6974019bce0132b7e85f3247dc7d147b3afbf3979c64d45ef460405160405180910390a2611003565b858583818110610fcf57610fcf613539565b905060200201357feed17fae9c8c79df92a8a28c129668d097f5c55c4cc4ea42d2d618c0fda8af8a60405160405180910390a25b508061100e8161354f565b915050610e32565b603354604080516315d9b46f60e31b8152905133926001600160a01b03169163aecda3789160048083019260209291908290030181865afa15801561105f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108391906134c5565b6001600160a01b0316146040518060400160405280600381526020016203130360ec1b815250906110c75760405162461bcd60e51b815260040161038b9190613506565b5060006110d2612bf7565b90506000816001600160a01b03166308ac08b96040518163ffffffff1660e01b8152600401602060405180830381865afa158015611114573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111389190613b2f565b90508083116040518060400160405280600381526020016237303160e81b815250906111775760405162461bcd60e51b815260040161038b9190613506565b50604051633a361ad160e11b8152600481018490526001600160a01b0383169063746c35a290602401600060405180830381600087803b1580156111ba57600080fd5b505af11580156111ce573d6000803e3d6000fd5b505050507f2326a0df34db769e143ca92ed7e2cd69db0263ec9604411030cbe62da6f62b218360405161120391815260200190565b60405180910390a1505050565b60335460408051636ee554f560e11b8152905133926001600160a01b03169163ddcaa9ea9160048083019260209291908290030181865afa158015611259573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127d91906134c5565b6001600160a01b031614604051806040016040528060038152602001621b981960e91b815250906112c15760405162461bcd60e51b815260040161038b9190613506565b5060006112cc612bf7565b60405163bedb86fb60e01b815283151560048201529091506001600160a01b0382169063bedb86fb90602401600060405180830381600087803b15801561131257600080fd5b505af1158015611326573d6000803e3d6000fd5b505050505050565b603354604080516315d9b46f60e31b8152905133926001600160a01b03169163aecda3789160048083019260209291908290030181865afa158015611377573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139b91906134c5565b6001600160a01b0316146040518060400160405280600381526020016203130360ec1b815250906113df5760405162461bcd60e51b815260040161038b9190613506565b5060006113ea612bf7565b905060005b83811015610454576000826001600160a01b031663eadff05587878581811061141a5761141a613539565b905060200201356040518263ffffffff1660e01b815260040161143f91815260200190565b6020604051808303816000875af115801561145e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114829190613b13565b9050836114aa576114aa86868481811061149e5761149e613539565b90506020020135612c98565b6114b48185612de4565b826001600160a01b03166389a7245d8787858181106114d5576114d5613539565b9050602002013583600001516040518363ffffffff1660e01b8152600401611507929190918252602082015260400190565b600060405180830381600087803b15801561152157600080fd5b505af1158015611535573d6000803e3d6000fd5b5050505083156115895785858381811061155157611551613539565b905060200201357f1603fabc6ecfe8a2406f0d0a45592fff62c0c6875901cf35d8a091c74cc08b9a60405160405180910390a26115cf565b85858381811061159b5761159b613539565b905060200201357f8062272b11576c2818b72b2017028f551699cd48fb41767885eb72d18e44dbb260405160405180910390a25b50806115da8161354f565b9150506113ef565b603354604080516315d9b46f60e31b8152905133926001600160a01b03169163aecda3789160048083019260209291908290030181865afa15801561162b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164f91906134c5565b6001600160a01b0316146040518060400160405280600381526020016203130360ec1b815250906116935760405162461bcd60e51b815260040161038b9190613506565b50603354604080516347f872f160e01b815290516000926001600160a01b0316916347f872f19160048083019260209291908290030181865afa1580156116de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170291906134c5565b905060005b82811015610a5557816001600160a01b03166307f7aafb85858481811061173057611730613539565b905060200201602081019061174591906133cf565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b15801561178657600080fd5b505af115801561179a573d6000803e3d6000fd5b5050505080806117a99061354f565b915050611707565b60335460408051636ee554f560e11b8152905133926001600160a01b03169163ddcaa9ea9160048083019260209291908290030181865afa1580156117fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181e91906134c5565b6001600160a01b031614604051806040016040528060038152602001621b981960e91b815250906118625760405162461bcd60e51b815260040161038b9190613506565b50600061186d612bf7565b604051632f923ff760e01b815260048101859052602481018490529091506001600160a01b03821690632f923ff7906044015b600060405180830381600087803b1580156118ba57600080fd5b505af11580156118ce573d6000803e3d6000fd5b50505050505050565b603354604080516315d9b46f60e31b8152905133926001600160a01b03169163aecda3789160048083019260209291908290030181865afa158015611920573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194491906134c5565b6001600160a01b0316146040518060400160405280600381526020016203130360ec1b815250906119885760405162461bcd60e51b815260040161038b9190613506565b506000611993612bf7565b905060005b83811015610454576000826001600160a01b031663eadff0558787858181106119c3576119c3613539565b905060200201356040518263ffffffff1660e01b81526004016119e891815260200190565b6020604051808303816000875af1158015611a07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2b9190613b13565b9050611a378185612e12565b826001600160a01b03166389a7245d878785818110611a5857611a58613539565b9050602002013583600001516040518363ffffffff1660e01b8152600401611a8a929190918252602082015260400190565b600060405180830381600087803b158015611aa457600080fd5b505af1158015611ab8573d6000803e3d6000fd5b50505050858583818110611ace57611ace613539565b905060200201357fa0d3e805ee1d3e2ede42facb6a56b605599f8e40d6c55fa36498cd68fbc3c81885604051611b0691815260200190565b60405180910390a25080611b198161354f565b915050611998565b603354604080516315d9b46f60e31b8152905133926001600160a01b03169163aecda3789160048083019260209291908290030181865afa158015611b6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8e91906134c5565b6001600160a01b0316146040518060400160405280600381526020016203130360ec1b81525090611bd25760405162461bcd60e51b815260040161038b9190613506565b506000611bdd612bf7565b60405163bbce5cf360e01b8152600481018590526001600160a01b0384811660248301529192509082169063bbce5cf3906044016118a0565b603354604080516315d9b46f60e31b8152905133926001600160a01b03169163aecda3789160048083019260209291908290030181865afa158015611c5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8391906134c5565b6001600160a01b0316146040518060400160405280600381526020016203130360ec1b81525090611cc75760405162461bcd60e51b815260040161038b9190613506565b506000611cd2612bf7565b905060005b83811015610454576000826001600160a01b031663eadff055878785818110611d0257611d02613539565b905060200201356040518263ffffffff1660e01b8152600401611d2791815260200190565b6020604051808303816000875af1158015611d46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6a9190613b13565b90508315611d8257611d7d816001612e6a565b611d8d565b611d8d816000612e6a565b826001600160a01b03166389a7245d878785818110611dae57611dae613539565b9050602002013583600001516040518363ffffffff1660e01b8152600401611de0929190918252602082015260400190565b600060405180830381600087803b158015611dfa57600080fd5b505af1158015611e0e573d6000803e3d6000fd5b505050508315611e6257858583818110611e2a57611e2a613539565b905060200201357fe0850c0895ec100425343341b0fe939b37776e188c991c2a14f3489a8207c73760405160405180910390a2611ea8565b858583818110611e7457611e74613539565b905060200201357f94676996b7d3838859708eff3c1f5a3dab2a43dfbff6399e14041d4b989df6ba60405160405180910390a25b5080611eb38161354f565b915050611cd7565b600054610100900460ff1615808015611edb5750600054600160ff909116105b80611ef55750303b158015611ef5575060005460ff166001145b611f585760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161038b565b6000805460ff191660011790558015611f7b576000805461ff0019166101001790555b603380546001600160a01b0319166001600160a01b0384161790558015611fdc576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b603354604080516315d9b46f60e31b8152905133926001600160a01b03169163aecda3789160048083019260209291908290030181865afa158015612029573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204d91906134c5565b6001600160a01b0316146040518060400160405280600381526020016203130360ec1b815250906120915760405162461bcd60e51b815260040161038b9190613506565b50600061209c612bf7565b905060005b82811015610a55576000826001600160a01b031663eadff0558686858181106120cc576120cc613539565b90506101400201600001356040518263ffffffff1660e01b81526004016120f591815260200190565b6020604051808303816000875af1158015612114573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121389190613b13565b905084848381811061214c5761214c613539565b9050610140020160c0013585858481811061216957612169613539565b905061014002016040013511156040518060400160405280600381526020016237303160e81b815250906121b05760405162461bcd60e51b815260040161038b9190613506565b508484838181106121c3576121c3613539565b9050610140020160c00135600014612237576127108585848181106121ea576121ea613539565b9050610140020160a0013511156040518060400160405280600381526020016237303160e81b815250906122315760405162461bcd60e51b815260040161038b9190613506565b50612293565b84848381811061224957612249613539565b9050610140020160a001356000146040518060400160405280600381526020016237303160e81b815250906122915760405162461bcd60e51b815260040161038b9190613506565b505b6122c28585848181106122a8576122a8613539565b905061014002016020013582612e1290919063ffffffff16565b6122f18585848181106122d7576122d7613539565b905061014002016040013582612e9890919063ffffffff16565b61232085858481811061230657612306613539565b905061014002016060013582612ee290919063ffffffff16565b61234f85858481811061233557612335613539565b905061014002016080013582612f3690919063ffffffff16565b61237e85858481811061236457612364613539565b9050610140020160a0013582612f8990919063ffffffff16565b6123ad85858481811061239357612393613539565b9050610140020160c0013582612fdd90919063ffffffff16565b6123dc8585848181106123c2576123c2613539565b9050610140020160e001358261302f90919063ffffffff16565b61240c8585848181106123f1576123f1613539565b9050610140020161010001358261308290919063ffffffff16565b826001600160a01b03166389a7245d86868581811061242d5761242d613539565b85516040516001600160e01b031960e087901b16815261014090920293909301356004820152602481019290925250604401600060405180830381600087803b15801561247957600080fd5b505af115801561248d573d6000803e3d6000fd5b5050505050808061249d9061354f565b9150506120a1565b603354604080516315d9b46f60e31b8152905133926001600160a01b03169163aecda3789160048083019260209291908290030181865afa1580156124ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251291906134c5565b6001600160a01b0316146040518060400160405280600381526020016203130360ec1b815250906125565760405162461bcd60e51b815260040161038b9190613506565b506000612561612bf7565b905060005b82811015610a555773__$0fe017e20684fbd032f923e9d615f3d00e$__63f943de388386868581811061259b5761259b613539565b90506020028101906125ad91906139ec565b6040518363ffffffff1660e01b81526004016125ca929190613a7d565b60006040518083038186803b1580156125e257600080fd5b505af41580156125f6573d6000803e3d6000fd5b5050505080806126059061354f565b915050612566565b603354604080516315d9b46f60e31b8152905133926001600160a01b03169163aecda3789160048083019260209291908290030181865afa158015612656573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267a91906134c5565b6001600160a01b0316146040518060400160405280600381526020016203130360ec1b815250906126be5760405162461bcd60e51b815260040161038b9190613506565b5060006126c9612bf7565b905060005b858110156118ce576000826001600160a01b031663eadff0558989858181106126f9576126f9613539565b905060200201356040518263ffffffff1660e01b815260040161271e91815260200190565b6020604051808303816000875af115801561273d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127619190613b13565b905061276d8187612f89565b612777818661302f565b6127818185613082565b826001600160a01b03166389a7245d8989858181106127a2576127a2613539565b9050602002013583600001516040518363ffffffff1660e01b81526004016127d4929190918252602082015260400190565b600060405180830381600087803b1580156127ee57600080fd5b505af1158015612802573d6000803e3d6000fd5b5050505087878381811061281857612818613539565b604080518a815260208181018b905291810189905291029290920135917f8e1b436e42bffc00dac953e4d4d5f688702e3e24b901bdaebf13d6e8f9046dde915060600160405180910390a2508061286e8161354f565b9150506126ce565b603354604080516315d9b46f60e31b8152905133926001600160a01b03169163aecda3789160048083019260209291908290030181865afa1580156128bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e391906134c5565b6001600160a01b0316146040518060400160405280600381526020016203130360ec1b815250906129275760405162461bcd60e51b815260040161038b9190613506565b506000612932612bf7565b60405163724e452960e11b815260048101859052602481018490529091506001600160a01b0382169063e49c8a52906044016118a0565b603354604080516315d9b46f60e31b8152905133926001600160a01b03169163aecda3789160048083019260209291908290030181865afa1580156129b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d691906134c5565b6001600160a01b0316146040518060400160405280600381526020016203130360ec1b81525090612a1a5760405162461bcd60e51b815260040161038b9190613506565b506000612a25612bf7565b905060005b83811015610454576000826001600160a01b031663eadff055878785818110612a5557612a55613539565b905060200201356040518263ffffffff1660e01b8152600401612a7a91815260200190565b6020604051808303816000875af1158015612a99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612abd9190613b13565b9050612ac981856130d5565b826001600160a01b03166389a7245d878785818110612aea57612aea613539565b9050602002013583600001516040518363ffffffff1660e01b8152600401612b1c929190918252602082015260400190565b600060405180830381600087803b158015612b3657600080fd5b505af1158015612b4a573d6000803e3d6000fd5b505050508315612b9e57858583818110612b6657612b66613539565b905060200201357f635c7b10ea9d592b3b5eef7ce7bda26b5e37eafc305f2c496ecbe4131c481fef60405160405180910390a2612be4565b858583818110612bb057612bb0613539565b905060200201357fc9b9ee8e2ea2d94533a409277610db94f7c5139a2159305e03a25f04bd54e15560405160405180910390a25b5080612bef8161354f565b915050612a2a565b60335460408051630261bf8b60e01b815290516000926001600160a01b031691630261bf8b9160048083019260209291908290030181865afa158015612c41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c6591906134c5565b905090565b603a81612c78576000612c7b565b60015b8351670400000000000000191660ff9190911690911b1790915250565b6000612ca2612bf7565b6001600160a01b03166377778db3836040518263ffffffff1660e01b8152600401612ccf91815260200190565b600060405180830381865afa158015612cec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612d149190810190613bf1565b604080820151606083015191516370a0823160e01b81526001600160a01b0392831660048201529293506000929116906370a0823190602401602060405180830381865afa158015612d6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d8e9190613b2f565b905080158015612daa57506101c08201516001600160801b0316155b6040518060400160405280600381526020016203730360ec1b81525090610a555760405162461bcd60e51b815260040161038b9190613506565b603881612df2576000612df5565b60015b8351670100000000000000191660ff9190911690911b1790915250565b6040805180820190915260038152620dcccd60ea1b602082015261ffff821115612e4f5760405162461bcd60e51b815260040161038b9190613506565b50815169ffff0000000000000000191660409190911b179052565b603b81612e78576000612e7b565b60015b8351670800000000000000191660ff9190911690911b1790915250565b60408051808201909152600381526203733360ec1b602082015261ffff821115612ed55760405162461bcd60e51b815260040161038b9190613506565b50815161ffff1916179052565b60408051808201909152600381526237333360e81b602082015260ff821115612f1e5760405162461bcd60e51b815260040161038b9190613506565b50815166ff000000000000191660309190911b179052565b60408051808201909152600381526237333960e81b602082015261ffff821115612f735760405162461bcd60e51b815260040161038b9190613506565b50815161ffff60501b191660509190911b179052565b6040805180820190915260038152621b999960e91b602082015261ffff821115612fc65760405162461bcd60e51b815260040161038b9190613506565b50815165ffff00000000191660209190911b179052565b60408051808201909152600381526237333160e81b602082015261ffff82111561301a5760405162461bcd60e51b815260040161038b9190613506565b50815163ffff0000191660109190911b179052565b60408051808201909152600381526203734360ec1b602082015261ffff82111561306c5760405162461bcd60e51b815260040161038b9190613506565b50815161ffff60601b191660609190911b179052565b60408051808201909152600381526237343160e81b602082015261ffff8211156130bf5760405162461bcd60e51b815260040161038b9190613506565b50815161ffff60701b191660709190911b179052565b6039816130e35760006130e6565b60015b8351670200000000000000191660ff9190911690911b1790915250565b60008083601f84011261311557600080fd5b5081356001600160401b0381111561312c57600080fd5b6020830191508360208260051b850101111561314757600080fd5b9250929050565b6001600160a01b038116811461316357600080fd5b50565b80356131718161314e565b919050565b60008060006040848603121561318b57600080fd5b83356001600160401b038111156131a157600080fd5b6131ad86828701613103565b90945092505060208401356131c18161314e565b809150509250925092565b600080602083850312156131df57600080fd5b82356001600160401b038111156131f557600080fd5b61320185828601613103565b90969095509350505050565b600081518084526020808501945080840160005b838110156132465781516001600160a01b031687529582019590820190600101613221565b509495945050505050565b606081526000613264606083018661320d565b8281036020840152613276818661320d565b9050828103604084015261328a818561320d565b9695505050505050565b6000806000604084860312156132a957600080fd5b83356001600160401b038111156132bf57600080fd5b6132cb86828701613103565b909790965060209590950135949350505050565b8035801515811461317157600080fd5b60008060006040848603121561330457600080fd5b83356001600160401b0381111561331a57600080fd5b61332686828701613103565b90945092506133399050602085016132df565b90509250925092565b60006020828403121561335457600080fd5b5035919050565b60006020828403121561336d57600080fd5b613376826132df565b9392505050565b6000806040838503121561339057600080fd5b50508035926020909101359150565b600080604083850312156133b257600080fd5b8235915060208301356133c48161314e565b809150509250929050565b6000602082840312156133e157600080fd5b81356133768161314e565b600080602083850312156133ff57600080fd5b82356001600160401b038082111561341657600080fd5b818501915085601f83011261342a57600080fd5b81358181111561343957600080fd5b8660206101408302850101111561344f57600080fd5b60209290920196919550909350505050565b60008060008060006080868803121561347957600080fd5b85356001600160401b0381111561348f57600080fd5b61349b88828901613103565b9099909850602088013597604081013597506060013595509350505050565b80516131718161314e565b6000602082840312156134d757600080fd5b81516133768161314e565b60005b838110156134fd5781810151838201526020016134e5565b50506000910152565b60208152600082518060208401526135258160408501602087016134e2565b601f01601f19169190910160400192915050565b634e487b7160e01b600052603260045260246000fd5b60006001820161356f57634e487b7160e01b600052601160045260246000fd5b5060010190565b634e487b7160e01b600052604160045260246000fd5b6000823561033e198336030181126135a357600080fd5b9190910192915050565b6000808335601e198436030181126135c457600080fd5b83016020810192503590506001600160401b038111156135e357600080fd5b80360382131561314757600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b803560ff8116811461317157600080fd5b6001600160a01b0384811682528316602082015260606040820181905260009061366890830161365b85613166565b6001600160a01b03169052565b61367560208401846135ad565b61034080608086015261368d6103a0860183856135f2565b925061369c60408701876135ad565b9250605f19808786030160a08801526136b68585846135f2565b9450606088013560c0880152608088013560e08801526136d860a08901613166565b935061010091506136f3828801856001600160a01b03169052565b61370060c08901896135ad565b94506101208289880301818a01526137198787846135f2565b965061372860e08b018b6135ad565b96509150610140838a890301818b01526137438888856135f2565b9750613750858c0161361b565b96506101609450613765858b018860ff169052565b613770828c01613166565b9650610180925061378b838b01886001600160a01b03169052565b613797818c018c6135ad565b97509150506101a0838a890301818b01526137b38888846135f2565b97506137c1858c018c6135ad565b975094506101c09150838a890301828b01526137de8888876135f2565b97506137eb838c01613166565b96506101e09450613806858b01886001600160a01b03169052565b613812818c018c6135ad565b9750925050610200838a890301818b015261382e8888856135f2565b975061383c828c018c6135ad565b975092506102209150838a890301828b01526138598888856135f2565b9750613866858c01613166565b96506102409450613881858b01886001600160a01b03169052565b61388d818c018c6135ad565b9750925050610260838a890301818b01526138a98888856135f2565b97506138b7828c018c6135ad565b975092506102809150838a890301828b01526138d48888856135f2565b97506138e1858c01613166565b96506102a094506138fc858b01886001600160a01b03169052565b6102c09650808b0135878b015250613915818b01613166565b9150506102e061392f818a01836001600160a01b03169052565b61393a848b01613166565b93506103009150613955828a01856001600160a01b03169052565b6103209350858a0135848a0152808a0135858a0152508089013561036089015250613982828901896135ad565b945092508087860301610380880152505061399e8383836135f2565b98975050505050505050565b6000806000606084860312156139bf57600080fd5b83516139ca8161314e565b60208501519093506139db8161314e565b60408501519092506131c18161314e565b60008235609e198336030181126135a357600080fd5b60008135613a0f8161314e565b6001600160a01b039081168452602083013590613a2b8261314e565b9081166020850152604083013590613a428261314e565b16604084015260608281013590840152613a5f60808301836135ad565b60a06080860152613a7460a0860182846135f2565b95945050505050565b6001600160a01b0383168152604060208201819052600090613aa190830184613a02565b949350505050565b60405161022081016001600160401b0381118282101715613acc57613acc613576565b60405290565b600060208284031215613ae457600080fd5b604051602081018181106001600160401b0382111715613b0657613b06613576565b6040529151825250919050565b600060208284031215613b2557600080fd5b6133768383613ad2565b600060208284031215613b4157600080fd5b5051919050565b600082601f830112613b5957600080fd5b81516001600160401b0380821115613b7357613b73613576565b604051601f8301601f19908116603f01168101908282118183101715613b9b57613b9b613576565b81604052838152866020858801011115613bb457600080fd5b61328a8460208301602089016134e2565b80516001600160801b038116811461317157600080fd5b805164ffffffffff8116811461317157600080fd5b600060208284031215613c0357600080fd5b81516001600160401b0380821115613c1a57600080fd5b908301906102208286031215613c2f57600080fd5b613c37613aa9565b613c418684613ad2565b8152613c4f602084016134ba565b6020820152613c60604084016134ba565b6040820152613c71606084016134ba565b6060820152613c82608084016134ba565b6080820152613c9360a084016134ba565b60a0820152613ca460c084016134ba565b60c082015260e083015182811115613cbb57600080fd5b613cc787828601613b48565b60e08301525061010083810151908201526101208084015190820152610140808401519082015261016080840151908201526101809150613d09828401613bc5565b828201526101a09150613d1d828401613bc5565b828201526101c09150613d31828401613bc5565b828201526101e09150613d45828401613bc5565b828201526102009150613d59828401613bdc565b9181019190915294935050505056fea2646970667358221220443c707800b1d1402f5c079794c5cf0abacadaa4af2e15b507ef55675933de3264736f6c63430008100033",
    "sourceMap": "1621:14220:132:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15095:207;;;:::i;:::-;;7651:397;;;;;;:::i;:::-;;:::i;2327:803::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;13986:320;;;;;;:::i;:::-;;:::i;11341:427::-;;;;;;:::i;:::-;;:::i;13586:299::-;;;;;;:::i;:::-;;:::i;3138:894::-;;;;;;:::i;:::-;;:::i;12521:401::-;;;;;;:::i;:::-;;:::i;13113:157::-;;;;;;:::i;:::-;;:::i;5002:839::-;;;;;;:::i;:::-;;:::i;14732:355::-;;;;;;:::i;:::-;;:::i;13278:218::-;;;;;;:::i;:::-;;:::i;6780:659::-;;;;;;:::i;:::-;;:::i;11912:221::-;;;;;;:::i;:::-;;:::i;4040:954::-;;;;;;:::i;:::-;;:::i;1869:135::-;;;;;;:::i;:::-;;:::i;8056:1998::-;;;;;;:::i;:::-;;:::i;14400:324::-;;;;;;:::i;:::-;;:::i;10404:929::-;;;;;;:::i;:::-;;:::i;12280:233::-;;;;;;:::i;:::-;;:::i;5849:734::-;;;;;;:::i;:::-;;:::i;15095:207::-;2054:16;;:31;;;-1:-1:-1;;;2054:31:132;;;;929:10:33;;-1:-1:-1;;;;;2054:16:132;;:29;;:31;;;;;;;;;;;;;;:16;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2054:47:132;;2103:28;;;;;;;;;;;;;-1:-1:-1;;;2103:28:132;;;2046:86;;;;;-1:-1:-1;;;2046:86:132;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;15209:16:132::1;::::0;:33:::1;::::0;;-1:-1:-1;;;15209:33:132;;;;15169:24:::1;::::0;-1:-1:-1;;;;;15209:16:132::1;::::0;:31:::1;::::0;:33:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:16;:33:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15169:74;;15254:11;-1:-1:-1::0;;;;;15254:38:132::1;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;15158:144;15095:207::o:0;7651:397::-;2054:16;;:31;;;-1:-1:-1;;;2054:31:132;;;;929:10:33;;-1:-1:-1;;;;;2054:16:132;;:29;;:31;;;;;;;;;;;;;;:16;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2054:47:132;;2103:28;;;;;;;;;;;;;-1:-1:-1;;;2103:28:132;;;2046:86;;;;;-1:-1:-1;;;2046:86:132;;;;;;;;:::i;:::-;;7776:23:::1;7802:17;:15;:17::i;:::-;7776:43;;7835:9;7830:211;7850:21:::0;;::::1;7830:211;;;7889:10;-1:-1:-1::0;;;;;7889:40:132::1;;7930:10;;7941:1;7930:13;;;;;;;:::i;:::-;;;;;;;7945:11;7889:68;;;;;;;;;;;;;;;9423:25:187::0;;;-1:-1:-1;;;;;9484:32:187;9479:2;9464:18;;9457:60;9411:2;9396:18;;9249:274;7889:68:132::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;8002:10;;8013:1;8002:13;;;;;;;:::i;:::-;7975:54;::::0;-1:-1:-1;;;;;9692:32:187;;9674:51;;8002:13:132::1;::::0;;::::1;::::0;;;::::1;;::::0;7975:54:::1;::::0;-1:-1:-1;9647:18:187;7975:54:132::1;;;;;;;7873:3:::0;::::1;::::0;::::1;:::i;:::-;;;;7830:211;;2327:803:::0;2054:16;;:31;;;-1:-1:-1;;;2054:31:132;;;;2501:16;;;;;;929:10:33;;-1:-1:-1;;;;;2054:16:132;;:29;;:31;;;;;;;;;;;;;;:16;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2054:47:132;;2103:28;;;;;;;;;;;;;-1:-1:-1;;;2103:28:132;;;2046:86;;;;;-1:-1:-1;;;2046:86:132;;;;;;;;:::i;:::-;-1:-1:-1;2609:25:132::1;2651:5:::0;-1:-1:-1;;;;;2637:27:132;::::1;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;2637:27:132::1;-1:-1:-1::0;2609:55:132;-1:-1:-1;2675:26:132::1;2718:5:::0;-1:-1:-1;;;;;2704:27:132;::::1;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;2704:27:132::1;-1:-1:-1::0;2675:56:132;-1:-1:-1;2742:26:132::1;2785:5:::0;-1:-1:-1;;;;;2771:27:132;::::1;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;2771:27:132::1;;2742:56;;2819:23;2845:17;:15;:17::i;:::-;2819:43;;2878:9;2873:190;2893:16:::0;;::::1;2873:190;;;3012:16;::::0;2975:17:::1;::::0;:36:::1;::::0;-1:-1:-1;;;;;3012:16:132::1;3030:10:::0;3042:5;;3048:1;3042:8;;::::1;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;2975:76;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2932:8;2941:1;2932:11;;;;;;;;:::i;:::-;;;;;;2945:9;2955:1;2945:12;;;;;;;;:::i;:::-;;;;;;2959:9;2969:1;2959:12;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2931:120:132;;::::1;2959:12;::::0;;::::1;::::0;;;;;2931:120;;;::::1;::::0;;;;;;::::1;::::0;;2911:3;::::1;::::0;::::1;:::i;:::-;;;;2873:190;;;-1:-1:-1::0;3091:8:132;;3101:9;;-1:-1:-1;3101:9:132;-1:-1:-1;2327:803:132;-1:-1:-1;;;;2327:803:132:o;13986:320::-;2054:16;;:31;;;-1:-1:-1;;;2054:31:132;;;;929:10:33;;-1:-1:-1;;;;;2054:16:132;;:29;;:31;;;;;;;;;;;;;;:16;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2054:47:132;;2103:28;;;;;;;;;;;;;-1:-1:-1;;;2103:28:132;;;2046:86;;;;;-1:-1:-1;;;2046:86:132;;;;;;;;:::i;:::-;;14103:23:::1;14129:17;:15;:17::i;:::-;14103:43;;14164:9;14159:140;14179:17:::0;;::::1;14159:140;;;14218:17;:46;14265:10;14277:6;;14284:1;14277:9;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;14218:69;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;14198:3;;;;;:::i;:::-;;;;14159:140;;;;14092:214;13986:320:::0;;:::o;11341:427::-;2054:16;;:31;;;-1:-1:-1;;;2054:31:132;;;;929:10:33;;-1:-1:-1;;;;;2054:16:132;;:29;;:31;;;;;;;;;;;;;;:16;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2054:47:132;;2103:28;;;;;;;;;;;;;-1:-1:-1;;;2103:28:132;;;2046:86;;;;;-1:-1:-1;;;2046:86:132;;;;;;;;:::i;:::-;;11505:23:::1;11531:17;:15;:17::i;:::-;11505:43;;11564:9;11559:202;11579:21:::0;;::::1;11559:202;;;11622:10;-1:-1:-1::0;;;;;11622:30:132::1;;11653:10;;11664:1;11653:13;;;;;;;:::i;:::-;;;;;;;11668:9;11622:56;;;;;;;;;;;;;;;19090:25:187::0;;;19146:2;19131:18;;19124:34;19078:2;19063:18;;18916:248;11622:56:132::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;11724:10;;11735:1;11724:13;;;;;;;:::i;:::-;;;;;;;11700:49;11739:9;11700:49;;;;19315:25:187::0;;19303:2;19288:18;;19169:177;11700:49:132::1;;;;;;;;11602:3:::0;::::1;::::0;::::1;:::i;:::-;;;;11559:202;;13586:299:::0;2054:16;;:31;;;-1:-1:-1;;;2054:31:132;;;;929:10:33;;-1:-1:-1;;;;;2054:16:132;;:29;;:31;;;;;;;;;;;;;;:16;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2054:47:132;;2103:28;;;;;;;;;;;;;-1:-1:-1;;;2103:28:132;;;2046:86;;;;;-1:-1:-1;;;2046:86:132;;;;;;;;:::i;:::-;;13691:23:::1;13717:17;:15;:17::i;:::-;13691:43;;13752:9;13747:131;13767:17:::0;;::::1;13747:131;;;13806:17;:37;13844:10;13856:6;;13863:1;13856:9;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;13806:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;13786:3;;;;;:::i;:::-;;;;13747:131;;3138:894:::0;2054:16;;:31;;;-1:-1:-1;;;2054:31:132;;;;929:10:33;;-1:-1:-1;;;;;2054:16:132;;:29;;:31;;;;;;;;;;;;;;:16;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2054:47:132;;2103:28;;;;;;;;;;;;;-1:-1:-1;;;2103:28:132;;;2046:86;;;;;-1:-1:-1;;;2046:86:132;;;;;;;;:::i;:::-;;3300:23:::1;3326:17;:15;:17::i;:::-;3300:43;;3359:9;3354:671;3374:21:::0;;::::1;3354:671;;;3417:54;3474:10;-1:-1:-1::0;;;;;3474:34:132::1;;3527:10;;3538:1;3527:13;;;;;;;:::i;:::-;;;;;;;3474:81;;;;;;;;;;;;;19315:25:187::0;;19303:2;19288:18;;19169:177;3474:81:132::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3417:138;;3574:4;3570:165;;;3599:39;:13:::0;3633:4:::1;3599:33;:39::i;:::-;3570:165;;;3679:40;:13:::0;3713:5:::1;3679:33;:40::i;:::-;3751:10;-1:-1:-1::0;;;;;3751:34:132::1;;3786:10;;3797:1;3786:13;;;;;;;:::i;:::-;;;;;;;3801;:18;;;3751:69;;;;;;;;;;;;;;;19090:25:187::0;;;19146:2;19131:18;;19124:34;19078:2;19063:18;;18916:248;3751:69:132::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;3841:4;3837:177;;;3897:10;;3908:1;3897:13;;;;;;;:::i;:::-;;;;;;;3871:40;;;;;;;;;;3837:177;;;3984:10;;3995:1;3984:13;;;;;;;:::i;:::-;;;;;;;3957:41;;;;;;;;;;3837:177;-1:-1:-1::0;3397:3:132;::::1;::::0;::::1;:::i;:::-;;;;3354:671;;12521:401:::0;2054:16;;:31;;;-1:-1:-1;;;2054:31:132;;;;929:10:33;;-1:-1:-1;;;;;2054:16:132;;:29;;:31;;;;;;;;;;;;;;:16;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2054:47:132;;2103:28;;;;;;;;;;;;;-1:-1:-1;;;2103:28:132;;;2046:86;;;;;-1:-1:-1;;;2046:86:132;;;;;;;;:::i;:::-;;12603:23:::1;12629:17;:15;:17::i;:::-;12603:43;;12689:14;12706:10;-1:-1:-1::0;;;;;12706:33:132::1;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12689:52;;12769:6;12760;:15;12777:32;;;;;;;;;;;;;-1:-1:-1::0;;;12777:32:132::1;;::::0;12752:58:::1;;;;;-1:-1:-1::0;;;12752:58:132::1;;;;;;;;:::i;:::-;-1:-1:-1::0;12821:41:132::1;::::0;-1:-1:-1;;;12821:41:132;;::::1;::::0;::::1;19315:25:187::0;;;-1:-1:-1;;;;;12821:33:132;::::1;::::0;::::1;::::0;19288:18:187;;12821:41:132::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;12880:34;12907:6;12880:34;;;;19315:25:187::0;;19303:2;19288:18;;19169:177;12880:34:132::1;;;;;;;;12592:330;;12521:401:::0;:::o;13113:157::-;2207:16;;:36;;;-1:-1:-1;;;2207:36:132;;;;929:10:33;;-1:-1:-1;;;;;2207:16:132;;:34;;:36;;;;;;;;;;;;;;:16;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2207:52:132;;2261:37;;;;;;;;;;;;;-1:-1:-1;;;2261:37:132;;;2199:100;;;;;-1:-1:-1;;;2199:100:132;;;;;;;;:::i;:::-;;13184:23:::1;13210:17;:15;:17::i;:::-;13238:24;::::0;-1:-1:-1;;;13238:24:132;;21455:14:187;;21448:22;13238:24:132::1;::::0;::::1;21430:41:187::0;13184:43:132;;-1:-1:-1;;;;;;13238:19:132;::::1;::::0;::::1;::::0;21403:18:187;;13238:24:132::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;13173:97;13113:157:::0;:::o;5002:839::-;2054:16;;:31;;;-1:-1:-1;;;2054:31:132;;;;929:10:33;;-1:-1:-1;;;;;2054:16:132;;:29;;:31;;;;;;;;;;;;;;:16;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2054:47:132;;2103:28;;;;;;;;;;;;;-1:-1:-1;;;2103:28:132;;;2046:86;;;;;-1:-1:-1;;;2046:86:132;;;;;;;;:::i;:::-;;5161:23:::1;5187:17;:15;:17::i;:::-;5161:43;;5220:9;5215:619;5235:21:::0;;::::1;5215:619;;;5278:54;5335:10;-1:-1:-1::0;;;;;5335:34:132::1;;5388:10;;5399:1;5388:13;;;;;;;:::i;:::-;;;;;;;5335:81;;;;;;;;;;;;;19315:25:187::0;;19303:2;19288:18;;19169:177;5335:81:132::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5278:138;;5438:4;5433:85;;5463:39;5488:10;;5499:1;5488:13;;;;;;;:::i;:::-;;;;;;;5463:24;:39::i;:::-;5532:29;:13:::0;5556:4;5532:23:::1;:29::i;:::-;5576:10;-1:-1:-1::0;;;;;5576:34:132::1;;5611:10;;5622:1;5611:13;;;;;;;:::i;:::-;;;;;;;5626;:18;;;5576:69;;;;;;;;;;;;;;;19090:25:187::0;;;19146:2;19131:18;;19124:34;19078:2;19063:18;;18916:248;5576:69:132::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;5666:4;5662:161;;;5714:10;;5725:1;5714:13;;;;;;;:::i;:::-;;;;;;;5697:31;;;;;;;;;;5662:161;;;5793:10;;5804:1;5793:13;;;;;;;:::i;:::-;;;;;;;5774:33;;;;;;;;;;5662:161;-1:-1:-1::0;5258:3:132;::::1;::::0;::::1;:::i;:::-;;;;5215:619;;14732:355:::0;2054:16;;:31;;;-1:-1:-1;;;2054:31:132;;;;929:10:33;;-1:-1:-1;;;;;2054:16:132;;:29;;:31;;;;;;;;;;;;;;:16;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2054:47:132;;2103:28;;;;;;;;;;;;;-1:-1:-1;;;2103:28:132;;;2046:86;;;;;-1:-1:-1;;;2046:86:132;;;;;;;;:::i;:::-;-1:-1:-1;14897:16:132::1;::::0;:39:::1;::::0;;-1:-1:-1;;;14897:39:132;;;;14839:36:::1;::::0;-1:-1:-1;;;;;14897:16:132::1;::::0;:37:::1;::::0;:39:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:16;:39:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14839:98;;14963:9;14958:121;14978:20:::0;;::::1;14958:121;;;15020:17;-1:-1:-1::0;;;;;15020:33:132::1;;15054:9;;15064:1;15054:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;15020:47;::::0;-1:-1:-1;;;;;;15020:47:132::1;::::0;;;;;;-1:-1:-1;;;;;9692:32:187;;;15020:47:132::1;::::0;::::1;9674:51:187::0;9647:18;;15020:47:132::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;15000:3;;;;;:::i;:::-;;;;14958:121;;13278:218:::0;2207:16;;:36;;;-1:-1:-1;;;2207:36:132;;;;929:10:33;;-1:-1:-1;;;;;2207:16:132;;:34;;:36;;;;;;;;;;;;;;:16;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2207:52:132;;2261:37;;;;;;;;;;;;;-1:-1:-1;;;2261:37:132;;;2199:100;;;;;-1:-1:-1;;;2199:100:132;;;;;;;;:::i;:::-;;13385:23:::1;13411:17;:15;:17::i;:::-;13439:49;::::0;-1:-1:-1;;;13439:49:132;;::::1;::::0;::::1;19090:25:187::0;;;19131:18;;;19124:34;;;13385:43:132;;-1:-1:-1;;;;;;13439:24:132;::::1;::::0;::::1;::::0;19063:18:187;;13439:49:132::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;13374:122;13278:218:::0;;:::o;6780:659::-;2054:16;;:31;;;-1:-1:-1;;;2054:31:132;;;;929:10:33;;-1:-1:-1;;;;;2054:16:132;;:29;;:31;;;;;;;;;;;;;;:16;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2054:47:132;;2103:28;;;;;;;;;;;;;-1:-1:-1;;;2103:28:132;;;2046:86;;;;;-1:-1:-1;;;2046:86:132;;;;;;;;:::i;:::-;;6945:23:::1;6971:17;:15;:17::i;:::-;6945:43;;7004:9;6999:433;7019:21:::0;;::::1;6999:433;;;7062:54;7119:10;-1:-1:-1::0;;;;;7119:34:132::1;;7172:10;;7183:1;7172:13;;;;;;;:::i;:::-;;;;;;;7119:81;;;;;;;;;;;;;19315:25:187::0;;19303:2;19288:18;;19169:177;7119:81:132::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7062:138:::0;-1:-1:-1;7217:45:132::1;7062:138:::0;7248:13;7217:30:::1;:45::i;:::-;7279:10;-1:-1:-1::0;;;;;7279:34:132::1;;7314:10;;7325:1;7314:13;;;;;;;:::i;:::-;;;;;;;7329;:18;;;7279:69;;;;;;;;;;;;;;;19090:25:187::0;;;19146:2;19131:18;;19124:34;19078:2;19063:18;;18916:248;7279:69:132::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;7391:10;;7402:1;7391:13;;;;;;;:::i;:::-;;;;;;;7370:50;7406:13;7370:50;;;;19315:25:187::0;;19303:2;19288:18;;19169:177;7370:50:132::1;;;;;;;;-1:-1:-1::0;7042:3:132;::::1;::::0;::::1;:::i;:::-;;;;6999:433;;11912:221:::0;2054:16;;:31;;;-1:-1:-1;;;2054:31:132;;;;929:10:33;;-1:-1:-1;;;;;2054:16:132;;:29;;:31;;;;;;;;;;;;;;:16;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2054:47:132;;2103:28;;;;;;;;;;;;;-1:-1:-1;;;2103:28:132;;;2046:86;;;;;-1:-1:-1;;;2046:86:132;;;;;;;;:::i;:::-;;12016:23:::1;12042:17;:15;:17::i;:::-;12070:55;::::0;-1:-1:-1;;;12070:55:132;;::::1;::::0;::::1;9423:25:187::0;;;-1:-1:-1;;;;;9484:32:187;;;9464:18;;;9457:60;12016:43:132;;-1:-1:-1;12070:35:132;;::::1;::::0;::::1;::::0;9396:18:187;;12070:55:132::1;9249:274:187::0;4040:954:132;2054:16;;:31;;;-1:-1:-1;;;2054:31:132;;;;929:10:33;;-1:-1:-1;;;;;2054:16:132;;:29;;:31;;;;;;;;;;;;;;:16;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2054:47:132;;2103:28;;;;;;;;;;;;;-1:-1:-1;;;2103:28:132;;;2046:86;;;;;-1:-1:-1;;;2046:86:132;;;;;;;;:::i;:::-;;4214:23:::1;4240:17;:15;:17::i;:::-;4214:43;;4273:9;4268:719;4288:21:::0;;::::1;4268:719;;;4331:54;4388:10;-1:-1:-1::0;;;;;4388:34:132::1;;4441:10;;4452:1;4441:13;;;;;;;:::i;:::-;;;;;;;4388:81;;;;;;;;;;;;;19315:25:187::0;;19303:2;19288:18;;19169:177;4388:81:132::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4331:138;;4488:4;4484:189;;;4513:51;:13:::0;4559:4:::1;4513:45;:51::i;:::-;4484:189;;;4605:52;:13:::0;4651:5:::1;4605:45;:52::i;:::-;4689:10;-1:-1:-1::0;;;;;4689:34:132::1;;4724:10;;4735:1;4724:13;;;;;;;:::i;:::-;;;;;;;4739;:18;;;4689:69;;;;;;;;;;;;;;;19090:25:187::0;;;19146:2;19131:18;;19124:34;19078:2;19063:18;;18916:248;4689:69:132::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;4779:4;4775:201;;;4847:10;;4858:1;4847:13;;;;;;;:::i;:::-;;;;;;;4809:52;;;;;;;;;;4775:201;;;4946:10;;4957:1;4946:13;;;;;;;:::i;:::-;;;;;;;4907:53;;;;;;;;;;4775:201;-1:-1:-1::0;4311:3:132;::::1;::::0;::::1;:::i;:::-;;;;4268:719;;1869:135:::0;3268:19:18;3291:13;;;;;;3290:14;;3336:34;;;;-1:-1:-1;3354:12:18;;3369:1;3354:12;;;;:16;3336:34;3335:108;;;-1:-1:-1;3415:4:18;1476:19:32;:23;;;3376:66:18;;-1:-1:-1;3425:12:18;;;;;:17;3376:66;3314:201;;;;-1:-1:-1;;;3314:201:18;;21684:2:187;3314:201:18;;;21666:21:187;21723:2;21703:18;;;21696:30;21762:34;21742:18;;;21735:62;-1:-1:-1;;;21813:18:187;;;21806:44;21867:19;;3314:201:18;21482:410:187;3314:201:18;3525:12;:16;;-1:-1:-1;;3525:16:18;3540:1;3525:16;;;3551:65;;;;3585:13;:20;;-1:-1:-1;;3585:20:18;;;;;3551:65;1944:16:132::1;:52:::0;;-1:-1:-1;;;;;;1944:52:132::1;-1:-1:-1::0;;;;;1944:52:132;::::1;;::::0;;3636:99:18;;;;3686:5;3670:21;;-1:-1:-1;;3670:21:18;;;3710:14;;-1:-1:-1;22049:36:187;;3710:14:18;;22037:2:187;22022:18;3710:14:18;;;;;;;3636:99;3258:483;1869:135:132;:::o;8056:1998::-;2054:16;;:31;;;-1:-1:-1;;;2054:31:132;;;;929:10:33;;-1:-1:-1;;;;;2054:16:132;;:29;;:31;;;;;;;;;;;;;;:16;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2054:47:132;;2103:28;;;;;;;;;;;;;-1:-1:-1;;;2103:28:132;;;2046:86;;;;;-1:-1:-1;;;2046:86:132;;;;;;;;:::i;:::-;;8168:23:::1;8194:17;:15;:17::i;:::-;8168:43;;8227:9;8222:1825;8242:17:::0;;::::1;8222:1825;;;8281:54;8338:10;-1:-1:-1::0;;;;;8338:34:132::1;;8391:6;;8398:1;8391:9;;;;;;;:::i;:::-;;;;;;:19;;;8338:87;;;;;;;;;;;;;19315:25:187::0;;19303:2;19288:18;;19169:177;8338:87:132::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8281:144;;8683:6;;8690:1;8683:9;;;;;;;:::i;:::-;;;;;;:30;;;8666:6;;8673:1;8666:9;;;;;;;:::i;:::-;;;;;;:13;;;:47;;8715:32;;;;;;;;;;;;;-1:-1:-1::0;;;8715:32:132::1;;::::0;8658:90:::1;;;;;-1:-1:-1::0;;;8658:90:132::1;;;;;;;;:::i;:::-;;8769:6;;8776:1;8769:9;;;;;;;:::i;:::-;;;;;;:30;;;8803:1;8769:35;8765:371;;470:3:145;8908:6:132;;8915:1;8908:9;;;;;;;:::i;:::-;;;;;;:26;;;:62;;8972:32;;;;;;;;;;;;;-1:-1:-1::0;;;8972:32:132::1;;::::0;8900:105:::1;;;;;-1:-1:-1::0;;;8900:105:132::1;;;;;;;;:::i;:::-;;8765:371;;;9054:6;;9061:1;9054:9;;;;;;;:::i;:::-;;;;;;:26;;;9084:1;9054:31;9087:32;;;;;;;;;;;;;-1:-1:-1::0;;;9087:32:132::1;;::::0;9046:74:::1;;;;;-1:-1:-1::0;;;9046:74:132::1;;;;;;;;:::i;:::-;;8765:371;9183:55;9214:6;;9221:1;9214:9;;;;;;;:::i;:::-;;;;;;:23;;;9183:13;:30;;:55;;;;:::i;:::-;9289:35;9310:6;;9317:1;9310:9;;;;;;;:::i;:::-;;;;;;:13;;;9289;:20;;:35;;;;:::i;:::-;9370:45;9396:6;;9403:1;9396:9;;;;;;;:::i;:::-;;;;;;:18;;;9370:13;:25;;:45;;;;:::i;:::-;9474:51;9503:6;;9510:1;9503:9;;;;;;;:::i;:::-;;;;;;:21;;;9474:13;:28;;:51;;;;:::i;:::-;9541:61;9575:6;;9582:1;9575:9;;;;;;;:::i;:::-;;;;;;:26;;;9541:13;:33;;:61;;;;:::i;:::-;9618:69;9656:6;;9663:1;9656:9;;;;;;;:::i;:::-;;;;;;:30;;;9618:13;:37;;:69;;;;:::i;:::-;9735:59;9768:6;;9775:1;9768:9;;;;;;;:::i;:::-;;;;;;:25;;;9735:13;:32;;:59;;;;:::i;:::-;9810:69;9848:6;;9855:1;9848:9;;;;;;;:::i;:::-;;;;;;:30;;;9810:13;:37;;:69;;;;:::i;:::-;9960:10;-1:-1:-1::0;;;;;9960:34:132::1;;9995:6;;10002:1;9995:9;;;;;;;:::i;:::-;10016:18:::0;;9960:75:::1;::::0;-1:-1:-1;;;;;;9960:75:132::1;::::0;;;;;;9995:9:::1;::::0;;::::1;::::0;;;::::1;:19;9960:75;::::0;::::1;19090:25:187::0;19131:18;;;19124:34;;;;-1:-1:-1;19063:18:187;;9960:75:132::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;8266:1781;8261:3;;;;;:::i;:::-;;;;8222:1825;;14400:324:::0;2054:16;;:31;;;-1:-1:-1;;;2054:31:132;;;;929:10:33;;-1:-1:-1;;;;;2054:16:132;;:29;;:31;;;;;;;;;;;;;;:16;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2054:47:132;;2103:28;;;;;;;;;;;;;-1:-1:-1;;;2103:28:132;;;2046:86;;;;;-1:-1:-1;;;2046:86:132;;;;;;;;:::i;:::-;;14519:23:::1;14545:17;:15;:17::i;:::-;14519:43;;14580:9;14575:142;14595:17:::0;;::::1;14575:142;;;14634:17;:48;14683:10;14695:6;;14702:1;14695:9;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;14634:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;14614:3;;;;;:::i;:::-;;;;14575:142;;10404:929:::0;2054:16;;:31;;;-1:-1:-1;;;2054:31:132;;;;929:10:33;;-1:-1:-1;;;;;2054:16:132;;:29;;:31;;;;;;;;;;;;;;:16;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2054:47:132;;2103:28;;;;;;;;;;;;;-1:-1:-1;;;2103:28:132;;;2046:86;;;;;-1:-1:-1;;;2046:86:132;;;;;;;;:::i;:::-;;10652:23:::1;10678:17;:15;:17::i;:::-;10652:43;;10711:9;10706:620;10726:21:::0;;::::1;10706:620;;;10769:54;10826:10;-1:-1:-1::0;;;;;10826:34:132::1;;10879:10;;10890:1;10879:13;;;;;;;:::i;:::-;;;;;;;10826:81;;;;;;;;;;;;;19315:25:187::0;;19303:2;19288:18;;19169:177;10826:81:132::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10769:138:::0;-1:-1:-1;10924:51:132::1;10769:138:::0;10958:16;10924:33:::1;:51::i;:::-;10990:49;:13:::0;11023:15;10990:32:::1;:49::i;:::-;11054:59;:13:::0;11092:20;11054:37:::1;:59::i;:::-;11130:10;-1:-1:-1::0;;;;;11130:34:132::1;;11165:10;;11176:1;11165:13;;;;;;;:::i;:::-;;;;;;;11180;:18;;;11130:69;;;;;;;;;;;;;;;19090:25:187::0;;;19146:2;19131:18;;19124:34;19078:2;19063:18;;18916:248;11130:69:132::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;11243:10;;11254:1;11243:13;;;;;;;:::i;:::-;11221:93;::::0;;22298:25:187;;;11243:13:132::1;22339:18:187::0;;;22332:34;;;22382:18;;;22375:34;;;11243:13:132;::::1;::::0;;;::::1;;::::0;11221:93:::1;::::0;-1:-1:-1;22286:2:187;22271:18;11221:93:132::1;;;;;;;-1:-1:-1::0;10749:3:132;::::1;::::0;::::1;:::i;:::-;;;;10706:620;;12280:233:::0;2054:16;;:31;;;-1:-1:-1;;;2054:31:132;;;;929:10:33;;-1:-1:-1;;;;;2054:16:132;;:29;;:31;;;;;;;;;;;;;;:16;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2054:47:132;;2103:28;;;;;;;;;;;;;-1:-1:-1;;;2103:28:132;;;2046:86;;;;;-1:-1:-1;;;2046:86:132;;;;;;;;:::i;:::-;;12390:23:::1;12416:17;:15;:17::i;:::-;12444:61;::::0;-1:-1:-1;;;12444:61:132;;::::1;::::0;::::1;19090:25:187::0;;;19131:18;;;19124:34;;;12390:43:132;;-1:-1:-1;;;;;;12444:38:132;::::1;::::0;::::1;::::0;19063:18:187;;12444:61:132::1;18916:248:187::0;5849:734:132;2054:16;;:31;;;-1:-1:-1;;;2054:31:132;;;;929:10:33;;-1:-1:-1;;;;;2054:16:132;;:29;;:31;;;;;;;;;;;;;;:16;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2054:47:132;;2103:28;;;;;;;;;;;;;-1:-1:-1;;;2103:28:132;;;2046:86;;;;;-1:-1:-1;;;2046:86:132;;;;;;;;:::i;:::-;;6008:23:::1;6034:17;:15;:17::i;:::-;6008:43;;6067:9;6062:514;6082:21:::0;;::::1;6062:514;;;6125:54;6182:10;-1:-1:-1::0;;;;;6182:34:132::1;;6235:10;;6246:1;6235:13;;;;;;;:::i;:::-;;;;;;;6182:81;;;;;;;;;;;;;19315:25:187::0;;19303:2;19288:18;;19169:177;6182:81:132::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6125:138:::0;-1:-1:-1;6280:29:132::1;6125:138:::0;6304:4;6280:23:::1;:29::i;:::-;6324:10;-1:-1:-1::0;;;;;6324:34:132::1;;6359:10;;6370:1;6359:13;;;;;;;:::i;:::-;;;;;;;6374;:18;;;6324:69;;;;;;;;;;;;;;;19090:25:187::0;;;19146:2;19131:18;;19124:34;19078:2;19063:18;;18916:248;6324:69:132::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;6414:4;6410:155;;;6459:10;;6470:1;6459:13;;;;;;;:::i;:::-;;;;;;;6445:28;;;;;;;;;;6410:155;;;6535:10;;6546:1;6535:13;;;;;;;:::i;:::-;;;;;;;6519:30;;;;;;;;;;6410:155;-1:-1:-1::0;6105:3:132;::::1;::::0;::::1;:::i;:::-;;;;6062:514;;15701:137:::0;15796:16;;:33;;;-1:-1:-1;;;15796:33:132;;;;15751:12;;-1:-1:-1;;;;;15796:16:132;;:31;;:33;;;;;;;;;;;;;;:16;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15776:54;;15701:137;:::o;7648:224:134:-;2410:2;7810:7;:15;;7824:1;7810:15;;;7820:1;7810:15;7771:9;;-1:-1:-1;;7771:26:134;7802:24;;;;;:64;;;7770:97;7758:109;;;-1:-1:-1;7648:224:134:o;15310:383:132:-;15388:32;15423:17;:15;:17::i;:::-;-1:-1:-1;;;;;15423:28:132;;15452:9;15423:39;;;;;;;;;;;;;19315:25:187;;19303:2;19288:18;;19169:177;15423:39:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15423:39:132;;;;;;;;;;;;:::i;:::-;15522:13;;;;;15547:21;;;;15504:65;;-1:-1:-1;;;15504:65:132;;-1:-1:-1;;;;;9692:32:187;;;15504:65:132;;;9674:51:187;15388:74:132;;-1:-1:-1;15475:26:132;;15504:42;;;;;9647:18:187;;15504:65:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15475:94;-1:-1:-1;15590:23:132;;:60;;;;-1:-1:-1;15617:28:132;;;;-1:-1:-1;;;;;15617:33:132;;15590:60;15652:34;;;;;;;;;;;;;-1:-1:-1;;;15652:34:132;;;15582:105;;;;;-1:-1:-1;;;15582:105:132;;;;;;;;:::i;6345:201:134:-;2294:2;6493:6;:14;;6506:1;6493:14;;;6502:1;6493:14;6457:9;;-1:-1:-1;;6457:23:134;6485;;;;;:55;;;6456:85;6444:97;;;-1:-1:-1;6345:201:134:o;9165:312::-;9332:32;;;;;;;;;;;;-1:-1:-1;;;9332:32:134;;;;2980:5;9289:41;;;9281:84;;;;-1:-1:-1;;;9281:84:134;;;;;;;;:::i;:::-;-1:-1:-1;9385:9:134;;-1:-1:-1;;9385:31:134;2540:2;9421:50;;;;9384:88;9372:100;;9165:312::o;8395:266::-;2481:2;8590:7;:15;;8604:1;8590:15;;;8600:1;8590:15;8536:9;;-1:-1:-1;;8536:35:134;8582:24;;;;;:73;;;8535:121;8517:139;;;-1:-1:-1;8395:266:134:o;3271:200::-;3397:21;;;;;;;;;;;;-1:-1:-1;;;3397:21:134;;;;2766:5;3375:20;;;3367:52;;;;-1:-1:-1;;;3367:52:134;;;;;;;;:::i;:::-;-1:-1:-1;3439:9:134;;-1:-1:-1;;3439:20:134;3438:28;3426:40;;3271:200::o;5574:276::-;5720:26;;;;;;;;;;;;-1:-1:-1;;;5720:26:134;;;;2929:3;5688:30;;;5680:67;;;;-1:-1:-1;;;5680:67:134;;;;;;;;:::i;:::-;-1:-1:-1;5767:9:134;;-1:-1:-1;;5767:25:134;2240:2;5797:47;;;;5766:79;5754:91;;5574:276::o;10319:290::-;10472:30;;;;;;;;;;;;-1:-1:-1;;;10472:30:134;;;;3025:5;10439:31;;;10431:72;;;;-1:-1:-1;;;10431:72:134;;;;;;;;:::i;:::-;-1:-1:-1;10523:9:134;;-1:-1:-1;;;;10523:29:134;2597:2;10557:46;;;;10522:82;10510:94;;10319:290::o;4767:295::-;4924:27;;;;;;;;;;;;-1:-1:-1;;;4924:27:134;;;;2882:5;4886:36;;;4878:74;;;;-1:-1:-1;;;4878:74:134;;;;;;;;:::i;:::-;-1:-1:-1;4972:9:134;;-1:-1:-1;;4972:34:134;2179:2;5011:45;;;;4971:86;4959:98;;4767:295::o;3913:327::-;4086:31;;;;;;;;;;;;-1:-1:-1;;;4086:31:134;;;;2826:5;4040:44;;;4032:86;;;;-1:-1:-1;;;4032:86:134;;;;;;;;:::i;:::-;-1:-1:-1;4138:9:134;;-1:-1:-1;;4138:38:134;2117:2;4181:53;;;;4137:98;4125:110;;3913:327::o;11147:322::-;11316:34;;;;;;;;;;;;-1:-1:-1;;;11316:34:134;;;;3074:5;11275:39;;;11267:84;;;;-1:-1:-1;;;11267:84:134;;;;;;;;:::i;:::-;-1:-1:-1;11371:9:134;;-1:-1:-1;;;;11371:33:134;2658:2;11409:54;;;;11370:94;11358:106;;11147:322::o;12022:366::-;12212:40;;;;;;;;;;;;-1:-1:-1;;;12212:40:134;;;;3129:5;12160:50;;;12152:101;;;;-1:-1:-1;;;12152:101:134;;;;;;;;:::i;:::-;-1:-1:-1;12273:9:134;;-1:-1:-1;;;;12273:39:134;2725:3;12317:65;;;;12272:111;12260:123;;12022:366::o;6971:201::-;2348:2;7119:6;:14;;7132:1;7119:14;;;7128:1;7119:14;7083:9;;-1:-1:-1;;7083:23:134;7111;;;;;:55;;;7082:85;7070:97;;;-1:-1:-1;6971:201:134:o;14:367:187:-;77:8;87:6;141:3;134:4;126:6;122:17;118:27;108:55;;159:1;156;149:12;108:55;-1:-1:-1;182:20:187;;-1:-1:-1;;;;;214:30:187;;211:50;;;257:1;254;247:12;211:50;294:4;286:6;282:17;270:29;;354:3;347:4;337:6;334:1;330:14;322:6;318:27;314:38;311:47;308:67;;;371:1;368;361:12;308:67;14:367;;;;;:::o;386:131::-;-1:-1:-1;;;;;461:31:187;;451:42;;441:70;;507:1;504;497:12;441:70;386:131;:::o;522:134::-;590:20;;619:31;590:20;619:31;:::i;:::-;522:134;;;:::o;661:572::-;756:6;764;772;825:2;813:9;804:7;800:23;796:32;793:52;;;841:1;838;831:12;793:52;881:9;868:23;-1:-1:-1;;;;;906:6:187;903:30;900:50;;;946:1;943;936:12;900:50;985:70;1047:7;1038:6;1027:9;1023:22;985:70;:::i;:::-;1074:8;;-1:-1:-1;959:96:187;-1:-1:-1;;1159:2:187;1144:18;;1131:32;1172:31;1131:32;1172:31;:::i;:::-;1222:5;1212:15;;;661:572;;;;;:::o;1238:474::-;1361:6;1369;1422:2;1410:9;1401:7;1397:23;1393:32;1390:52;;;1438:1;1435;1428:12;1390:52;1478:9;1465:23;-1:-1:-1;;;;;1503:6:187;1500:30;1497:50;;;1543:1;1540;1533:12;1497:50;1582:70;1644:7;1635:6;1624:9;1620:22;1582:70;:::i;:::-;1671:8;;1556:96;;-1:-1:-1;1238:474:187;-1:-1:-1;;;;1238:474:187:o;1826:461::-;1879:3;1917:5;1911:12;1944:6;1939:3;1932:19;1970:4;1999:2;1994:3;1990:12;1983:19;;2036:2;2029:5;2025:14;2057:1;2067:195;2081:6;2078:1;2075:13;2067:195;;;2146:13;;-1:-1:-1;;;;;2142:39:187;2130:52;;2202:12;;;;2237:15;;;;2178:1;2096:9;2067:195;;;-1:-1:-1;2278:3:187;;1826:461;-1:-1:-1;;;;;1826:461:187:o;2292:669::-;2627:2;2616:9;2609:21;2590:4;2653:56;2705:2;2694:9;2690:18;2682:6;2653:56;:::i;:::-;2757:9;2749:6;2745:22;2740:2;2729:9;2725:18;2718:50;2791:44;2828:6;2820;2791:44;:::i;:::-;2777:58;;2883:9;2875:6;2871:22;2866:2;2855:9;2851:18;2844:50;2911:44;2948:6;2940;2911:44;:::i;:::-;2903:52;2292:669;-1:-1:-1;;;;;;2292:669:187:o;3449:505::-;3544:6;3552;3560;3613:2;3601:9;3592:7;3588:23;3584:32;3581:52;;;3629:1;3626;3619:12;3581:52;3669:9;3656:23;-1:-1:-1;;;;;3694:6:187;3691:30;3688:50;;;3734:1;3731;3724:12;3688:50;3773:70;3835:7;3826:6;3815:9;3811:22;3773:70;:::i;:::-;3862:8;;3747:96;;-1:-1:-1;3944:2:187;3929:18;;;;3916:32;;3449:505;-1:-1:-1;;;;3449:505:187:o;4439:160::-;4504:20;;4560:13;;4553:21;4543:32;;4533:60;;4589:1;4586;4579:12;4604:505;4696:6;4704;4712;4765:2;4753:9;4744:7;4740:23;4736:32;4733:52;;;4781:1;4778;4771:12;4733:52;4821:9;4808:23;-1:-1:-1;;;;;4846:6:187;4843:30;4840:50;;;4886:1;4883;4876:12;4840:50;4925:70;4987:7;4978:6;4967:9;4963:22;4925:70;:::i;:::-;5014:8;;-1:-1:-1;4899:96:187;-1:-1:-1;5068:35:187;;-1:-1:-1;5099:2:187;5084:18;;5068:35;:::i;:::-;5058:45;;4604:505;;;;;:::o;5114:180::-;5173:6;5226:2;5214:9;5205:7;5201:23;5197:32;5194:52;;;5242:1;5239;5232:12;5194:52;-1:-1:-1;5265:23:187;;5114:180;-1:-1:-1;5114:180:187:o;5299:::-;5355:6;5408:2;5396:9;5387:7;5383:23;5379:32;5376:52;;;5424:1;5421;5414:12;5376:52;5447:26;5463:9;5447:26;:::i;:::-;5437:36;5299:180;-1:-1:-1;;;5299:180:187:o;5926:248::-;5994:6;6002;6055:2;6043:9;6034:7;6030:23;6026:32;6023:52;;;6071:1;6068;6061:12;6023:52;-1:-1:-1;;6094:23:187;;;6164:2;6149:18;;;6136:32;;-1:-1:-1;5926:248:187:o;6179:315::-;6247:6;6255;6308:2;6296:9;6287:7;6283:23;6279:32;6276:52;;;6324:1;6321;6314:12;6276:52;6360:9;6347:23;6337:33;;6420:2;6409:9;6405:18;6392:32;6433:31;6458:5;6433:31;:::i;:::-;6483:5;6473:15;;;6179:315;;;;;:::o;6499:247::-;6558:6;6611:2;6599:9;6590:7;6586:23;6582:32;6579:52;;;6627:1;6624;6617:12;6579:52;6666:9;6653:23;6685:31;6710:5;6685:31;:::i;6751:659::-;6876:6;6884;6937:2;6925:9;6916:7;6912:23;6908:32;6905:52;;;6953:1;6950;6943:12;6905:52;6993:9;6980:23;-1:-1:-1;;;;;7063:2:187;7055:6;7052:14;7049:34;;;7079:1;7076;7069:12;7049:34;7117:6;7106:9;7102:22;7092:32;;7162:7;7155:4;7151:2;7147:13;7143:27;7133:55;;7184:1;7181;7174:12;7133:55;7224:2;7211:16;7250:2;7242:6;7239:14;7236:34;;;7266:1;7263;7256:12;7236:34;7324:7;7319:2;7309:6;7301;7297:19;7293:2;7289:28;7285:37;7282:50;7279:70;;;7345:1;7342;7335:12;7279:70;7376:2;7368:11;;;;;7398:6;;-1:-1:-1;6751:659:187;;-1:-1:-1;;;;6751:659:187:o;7415:642::-;7528:6;7536;7544;7552;7560;7613:3;7601:9;7592:7;7588:23;7584:33;7581:53;;;7630:1;7627;7620:12;7581:53;7670:9;7657:23;-1:-1:-1;;;;;7695:6:187;7692:30;7689:50;;;7735:1;7732;7725:12;7689:50;7774:70;7836:7;7827:6;7816:9;7812:22;7774:70;:::i;:::-;7863:8;;7748:96;;-1:-1:-1;7945:2:187;7930:18;;7917:32;;7996:2;7981:18;;7968:32;;-1:-1:-1;8047:2:187;8032:18;8019:32;;-1:-1:-1;7415:642:187;-1:-1:-1;;;;7415:642:187:o;8062:138::-;8141:13;;8163:31;8141:13;8163:31;:::i;8205:251::-;8275:6;8328:2;8316:9;8307:7;8303:23;8299:32;8296:52;;;8344:1;8341;8334:12;8296:52;8376:9;8370:16;8395:31;8420:5;8395:31;:::i;8461:250::-;8546:1;8556:113;8570:6;8567:1;8564:13;8556:113;;;8646:11;;;8640:18;8627:11;;;8620:39;8592:2;8585:10;8556:113;;;-1:-1:-1;;8703:1:187;8685:16;;8678:27;8461:250::o;8716:396::-;8865:2;8854:9;8847:21;8828:4;8897:6;8891:13;8940:6;8935:2;8924:9;8920:18;8913:34;8956:79;9028:6;9023:2;9012:9;9008:18;9003:2;8995:6;8991:15;8956:79;:::i;:::-;9096:2;9075:15;-1:-1:-1;;9071:29:187;9056:45;;;;9103:2;9052:54;;8716:396;-1:-1:-1;;8716:396:187:o;9117:127::-;9178:10;9173:3;9169:20;9166:1;9159:31;9209:4;9206:1;9199:15;9233:4;9230:1;9223:15;9736:232;9775:3;9796:17;;;9793:140;;9855:10;9850:3;9846:20;9843:1;9836:31;9890:4;9887:1;9880:15;9918:4;9915:1;9908:15;9793:140;-1:-1:-1;9960:1:187;9949:13;;9736:232::o;9973:127::-;10034:10;10029:3;10025:20;10022:1;10015:31;10065:4;10062:1;10055:15;10089:4;10086:1;10079:15;10105:335;10208:4;10266:11;10253:25;10360:3;10356:8;10345;10329:14;10325:29;10321:44;10301:18;10297:69;10287:97;;10380:1;10377;10370:12;10287:97;10401:33;;;;;10105:335;-1:-1:-1;;10105:335:187:o;10445:501::-;10504:5;10511:6;10571:3;10558:17;10657:2;10653:7;10642:8;10626:14;10622:29;10618:43;10598:18;10594:68;10584:96;;10676:1;10673;10666:12;10584:96;10704:33;;10808:4;10795:18;;;-1:-1:-1;10756:21:187;;-1:-1:-1;;;;;;10825:30:187;;10822:50;;;10868:1;10865;10858:12;10822:50;10915:6;10899:14;10895:27;10888:5;10884:39;10881:59;;;10936:1;10933;10926:12;10951:267;11040:6;11035:3;11028:19;11092:6;11085:5;11078:4;11073:3;11069:14;11056:43;-1:-1:-1;11144:1:187;11119:16;;;11137:4;11115:27;;;11108:38;;;;11200:2;11179:15;;;-1:-1:-1;;11175:29:187;11166:39;;;11162:50;;10951:267::o;11223:156::-;11289:20;;11349:4;11338:16;;11328:27;;11318:55;;11369:1;11366;11359:12;11464:5309;-1:-1:-1;;;;;11815:15:187;;;11797:34;;11867:15;;11862:2;11847:18;;11840:43;11919:2;11914;11899:18;;11892:30;;;11740:4;;11931:66;;11978:18;;11950:26;11969:6;11950:26;:::i;:::-;-1:-1:-1;;;;;1783:31:187;1771:44;;1717:104;11931:66;12040:56;12092:2;12084:6;12080:15;12072:6;12040:56;:::i;:::-;12115:6;12158:2;12152:3;12141:9;12137:19;12130:31;12184:75;12254:3;12243:9;12239:19;12225:12;12211;12184:75;:::i;:::-;12170:89;;12306:56;12358:2;12350:6;12346:15;12338:6;12306:56;:::i;:::-;12268:94;;12385:2;12381:7;12453:2;12441:9;12433:6;12429:22;12425:31;12419:3;12408:9;12404:19;12397:60;12480:66;12539:6;12523:14;12507;12480:66;:::i;:::-;12466:80;;12608:2;12600:6;12596:15;12583:29;12577:3;12566:9;12562:19;12555:58;12675:3;12667:6;12663:16;12650:30;12644:3;12633:9;12629:19;12622:59;12712:36;12743:3;12735:6;12731:16;12712:36;:::i;:::-;12690:58;;12767:3;12757:13;;12779:54;12829:2;12818:9;12814:18;12798:14;-1:-1:-1;;;;;1783:31:187;1771:44;;1717:104;12779:54;12880:57;12932:3;12924:6;12920:16;12912:6;12880:57;:::i;:::-;12842:95;;12956:3;13023:2;13011:9;13003:6;12999:22;12995:31;12990:2;12979:9;12975:18;12968:59;13050:66;13109:6;13093:14;13077;13050:66;:::i;:::-;13036:80;;13163:57;13215:3;13207:6;13203:16;13195:6;13163:57;:::i;:::-;13125:95;;;;13239:3;13306:2;13294:9;13286:6;13282:22;13278:31;13273:2;13262:9;13258:18;13251:59;13333:66;13392:6;13376:14;13360;13333:66;:::i;:::-;13319:80;;13430:33;13459:2;13451:6;13447:15;13430:33;:::i;:::-;13408:55;;13482:3;13472:13;;13494:52;13542:2;13531:9;13527:18;13511:14;11451:4;11440:16;11428:29;;11384:75;13494:52;13577:35;13608:2;13600:6;13596:15;13577:35;:::i;:::-;13555:57;;13631:3;13621:13;;13643:54;13693:2;13682:9;13678:18;13662:14;-1:-1:-1;;;;;1783:31:187;1771:44;;1717:104;13643:54;13744:56;13796:2;13788:6;13784:15;13776:6;13744:56;:::i;:::-;13706:94;;;;;13819:3;13886:2;13874:9;13866:6;13862:22;13858:31;13853:2;13842:9;13838:18;13831:59;13913:66;13972:6;13956:14;13940;13913:66;:::i;:::-;13899:80;;14026:56;14078:2;14070:6;14066:15;14058:6;14026:56;:::i;:::-;13988:94;;;;14102:3;14091:14;;14170:2;14158:9;14150:6;14146:22;14142:31;14136:3;14125:9;14121:19;14114:60;14197:66;14256:6;14240:14;14224;14197:66;:::i;:::-;14183:80;;14294:35;14325:2;14317:6;14313:15;14294:35;:::i;:::-;14272:57;;14349:3;14338:14;;14361:55;14411:3;14400:9;14396:19;14380:14;-1:-1:-1;;;;;1783:31:187;1771:44;;1717:104;14361:55;14464:56;14516:2;14508:6;14504:15;14496:6;14464:56;:::i;:::-;14425:95;;;;;14540:3;14608:2;14596:9;14588:6;14584:22;14580:31;14574:3;14563:9;14559:19;14552:60;14635:67;14695:6;14679:14;14662:15;14635:67;:::i;:::-;14621:81;;14750:57;14802:3;14794:6;14790:16;14782:6;14750:57;:::i;:::-;14711:96;;;;14827:3;14816:14;;14895:2;14883:9;14875:6;14871:22;14867:31;14861:3;14850:9;14846:19;14839:60;14922:67;14982:6;14966:14;14949:15;14922:67;:::i;:::-;14908:81;;15021:36;15052:3;15044:6;15040:16;15021:36;:::i;:::-;14998:59;;15077:3;15066:14;;15089:56;15140:3;15129:9;15125:19;15108:15;-1:-1:-1;;;;;1783:31:187;1771:44;;1717:104;15089:56;15193:57;15245:3;15237:6;15233:16;15225:6;15193:57;:::i;:::-;15154:96;;;;;15270:3;15338:2;15326:9;15318:6;15314:22;15310:31;15304:3;15293:9;15289:19;15282:60;15365:67;15425:6;15409:14;15392:15;15365:67;:::i;:::-;15351:81;;15480:57;15532:3;15524:6;15520:16;15512:6;15480:57;:::i;:::-;15441:96;;;;15557:3;15546:14;;15625:2;15613:9;15605:6;15601:22;15597:31;15591:3;15580:9;15576:19;15569:60;15653:67;15713:6;15697:14;15680:15;15653:67;:::i;:::-;15638:82;;15752:36;15783:3;15775:6;15771:16;15752:36;:::i;:::-;15729:59;;15808:3;15797:14;;15820:56;15871:3;15860:9;15856:19;15839:15;-1:-1:-1;;;;;1783:31:187;1771:44;;1717:104;15820:56;15896:3;15885:14;;15961:3;15953:6;15949:16;15936:30;15930:3;15919:9;15915:19;15908:59;;15999:36;16030:3;16022:6;16018:16;15999:36;:::i;:::-;15976:59;;;16055:3;16067:56;16118:3;16107:9;16103:19;16086:15;-1:-1:-1;;;;;1783:31:187;1771:44;;1717:104;16067:56;16155:36;16186:3;16178:6;16174:16;16155:36;:::i;:::-;16132:59;;16211:3;16200:14;;16223:56;16274:3;16263:9;16259:19;16242:15;-1:-1:-1;;;;;1783:31:187;1771:44;;1717:104;16223:56;16299:3;16288:14;;16364:3;16356:6;16352:16;16339:30;16333:3;16322:9;16318:19;16311:59;16431:3;16423:6;16419:16;16406:30;16401:2;16390:9;16386:18;16379:58;;16499:3;16491:6;16487:16;16474:30;16468:3;16457:9;16453:19;16446:59;;16554:57;16606:3;16598:6;16594:16;16586:6;16554:57;:::i;:::-;16514:97;;;;16677:2;16665:9;16656:7;16652:23;16648:32;16642:3;16631:9;16627:19;16620:61;;;16698:69;16759:7;16742:15;16725;16698:69;:::i;:::-;16690:77;11464:5309;-1:-1:-1;;;;;;;;11464:5309:187:o;16778:519::-;16866:6;16874;16882;16935:2;16923:9;16914:7;16910:23;16906:32;16903:52;;;16951:1;16948;16941:12;16903:52;16983:9;16977:16;17002:31;17027:5;17002:31;:::i;:::-;17102:2;17087:18;;17081:25;17052:5;;-1:-1:-1;17115:33:187;17081:25;17115:33;:::i;:::-;17219:2;17204:18;;17198:25;17167:7;;-1:-1:-1;17232:33:187;17198:25;17232:33;:::i;17302:339::-;17409:4;17467:11;17454:25;17561:3;17557:8;17546;17530:14;17526:29;17522:44;17502:18;17498:69;17488:97;;17581:1;17578;17571:12;17646:823;17718:3;17764:5;17751:19;17779:33;17804:7;17779:33;:::i;:::-;-1:-1:-1;;;;;17871:16:187;;;17859:29;;17936:4;17925:16;;17912:30;;17951:33;17912:30;17951:33;:::i;:::-;18016:16;;;18009:4;18000:14;;17993:40;18081:4;18070:16;;18057:30;;18096:33;18057:30;18096:33;:::i;:::-;18161:16;18154:4;18145:14;;18138:40;18234:4;18223:16;;;18210:30;18194:14;;;18187:54;18284:56;18334:4;18323:16;;18227:5;18284:56;:::i;:::-;18372:4;18365;18360:3;18356:14;18349:28;18393:70;18457:4;18452:3;18448:14;18434:12;18420;18393:70;:::i;:::-;18386:77;17646:823;-1:-1:-1;;;;;17646:823:187:o;18474:437::-;-1:-1:-1;;;;;18741:32:187;;18723:51;;18810:2;18805;18790:18;;18783:30;;;-1:-1:-1;;18830:75:187;;18886:18;;18878:6;18830:75;:::i;:::-;18822:83;18474:437;-1:-1:-1;;;;18474:437:187:o;20128:250::-;20195:2;20189:9;20237:6;20225:19;;-1:-1:-1;;;;;20259:34:187;;20295:22;;;20256:62;20253:88;;;20321:18;;:::i;:::-;20357:2;20350:22;20128:250;:::o;20383:426::-;20464:5;20512:4;20500:9;20495:3;20491:19;20487:30;20484:50;;;20530:1;20527;20520:12;20484:50;20563:2;20557:9;20605:4;20597:6;20593:17;20676:6;20664:10;20661:22;-1:-1:-1;;;;;20628:10:187;20625:34;20622:62;20619:88;;;20687:18;;:::i;:::-;20723:2;20716:22;20786:16;;20771:32;;-1:-1:-1;20756:6:187;20383:426;-1:-1:-1;20383:426:187:o;20814:282::-;20926:6;20979:2;20967:9;20958:7;20954:23;20950:32;20947:52;;;20995:1;20992;20985:12;20947:52;21018:72;21082:7;21071:9;21018:72;:::i;21101:184::-;21171:6;21224:2;21212:9;21203:7;21199:23;21195:32;21192:52;;;21240:1;21237;21230:12;21192:52;-1:-1:-1;21263:16:187;;21101:184;-1:-1:-1;21101:184:187:o;22420:699::-;22474:5;22527:3;22520:4;22512:6;22508:17;22504:27;22494:55;;22545:1;22542;22535:12;22494:55;22574:6;22568:13;-1:-1:-1;;;;;22637:2:187;22633;22630:10;22627:36;;;22643:18;;:::i;:::-;22718:2;22712:9;22686:2;22772:13;;-1:-1:-1;;22768:22:187;;;22792:2;22764:31;22760:40;22748:53;;;22816:18;;;22836:22;;;22813:46;22810:72;;;22862:18;;:::i;:::-;22902:10;22898:2;22891:22;22937:2;22929:6;22922:18;22983:3;22976:4;22971:2;22963:6;22959:15;22955:26;22952:35;22949:55;;;23000:1;22997;22990:12;22949:55;23013:76;23086:2;23079:4;23071:6;23067:17;23060:4;23052:6;23048:17;23013:76;:::i;23124:192::-;23203:13;;-1:-1:-1;;;;;23245:46:187;;23235:57;;23225:85;;23306:1;23303;23296:12;23321:169;23399:13;;23452:12;23441:24;;23431:35;;23421:63;;23480:1;23477;23470:12;23495:1962;23591:6;23644:2;23632:9;23623:7;23619:23;23615:32;23612:52;;;23660:1;23657;23650:12;23612:52;23693:9;23687:16;-1:-1:-1;;;;;23763:2:187;23755:6;23752:14;23749:34;;;23779:1;23776;23769:12;23749:34;23802:22;;;;23858:6;23840:16;;;23836:29;23833:49;;;23878:1;23875;23868:12;23833:49;23904:17;;:::i;:::-;23944:65;24001:7;23997:2;23944:65;:::i;:::-;23937:5;23930:80;24042:42;24080:2;24076;24072:11;24042:42;:::i;:::-;24037:2;24030:5;24026:14;24019:66;24117:42;24155:2;24151;24147:11;24117:42;:::i;:::-;24112:2;24105:5;24101:14;24094:66;24192:42;24230:2;24226;24222:11;24192:42;:::i;:::-;24187:2;24180:5;24176:14;24169:66;24268:43;24306:3;24302:2;24298:12;24268:43;:::i;:::-;24262:3;24255:5;24251:15;24244:68;24345:43;24383:3;24379:2;24375:12;24345:43;:::i;:::-;24339:3;24332:5;24328:15;24321:68;24422:43;24460:3;24456:2;24452:12;24422:43;:::i;:::-;24416:3;24409:5;24405:15;24398:68;24505:3;24501:2;24497:12;24491:19;24535:2;24525:8;24522:16;24519:36;;;24551:1;24548;24541:12;24519:36;24588:56;24636:7;24625:8;24621:2;24617:17;24588:56;:::i;:::-;24582:3;24571:15;;24564:81;-1:-1:-1;24664:3:187;24705:11;;;24699:18;24683:14;;;24676:42;24737:3;24778:11;;;24772:18;24756:14;;;24749:42;24810:3;24851:11;;;24845:18;24829:14;;;24822:42;24883:3;24924:11;;;24918:18;24902:14;;;24895:42;24956:3;;-1:-1:-1;24991:42:187;25021:11;;;24991:42;:::i;:::-;24986:2;24979:5;24975:14;24968:66;25053:3;25043:13;;25088:42;25126:2;25122;25118:11;25088:42;:::i;:::-;25083:2;25076:5;25072:14;25065:66;25150:3;25140:13;;25185:42;25223:2;25219;25215:11;25185:42;:::i;:::-;25180:2;25173:5;25169:14;25162:66;25248:3;25237:14;;25284:43;25322:3;25318:2;25314:12;25284:43;:::i;:::-;25278:3;25271:5;25267:15;25260:68;25348:3;25337:14;;25384:42;25421:3;25417:2;25413:12;25384:42;:::i;:::-;25367:15;;;25360:67;;;;25371:5;23495:1962;-1:-1:-1;;;;23495:1962:187:o",
    "linkReferences": {
      "src/protocol/libraries/logic/ConfiguratorLogic.sol": {
        "ConfiguratorLogic": [
          {
            "start": 1983,
            "length": 20
          },
          {
            "start": 2488,
            "length": 20
          },
          {
            "start": 3284,
            "length": 20
          },
          {
            "start": 9584,
            "length": 20
          }
        ]
      }
    }
  },
  "methodIdentifiers": {
    "approveExecutionDelegateContracts(address[])": "80a4d93d",
    "approveWETHExecutionDelegate()": "0e342789",
    "batchConfigReserve((uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool)[])": "c739fd41",
    "batchInitLendingPoolReserve((address,string,string,uint256,uint256,address,string,string,uint8,address,string,string,address,string,string,address,string,string,address,uint256,address,address,uint256,uint256,uint256,string)[])": "14699c65",
    "configureReserveAuction(uint256[],uint256,uint256,uint256)": "d9db75ee",
    "initialize(address)": "c4d66de8",
    "setActiveFlagOnReserve(uint256[],bool)": "7bb28860",
    "setBorrowingFlagOnReserve(uint256[],bool)": "5b5b815e",
    "setFreezeFlagOnReserve(uint256[],bool)": "f9e8cafa",
    "setMaxNumberOfReserves(uint256)": "746c35a2",
    "setPoolPause(bool)": "7641f3d9",
    "setPoolPausedTime(uint256,uint256)": "84636d4f",
    "setReserveCreatorAddress(uint256,address)": "bbce5cf3",
    "setReserveCreatorPercentage(uint256,uint256)": "e49c8a52",
    "setReserveFactor(uint256[],uint256)": "a9c64401",
    "setReserveInterestRateAddress(uint256[],address)": "12b4f190",
    "setReserveMaxSupply(uint256[],uint256)": "2d72e18e",
    "setVariableRateBorrowingFlagOnReserve(uint256[],bool)": "bfead1a4",
    "updateFToken((address,address,address,uint256,bytes)[])": "3c8db8b1",
    "updateStableDebtToken((address,address,address,uint256,bytes)[])": "29534299",
    "updateVariableDebtToken((address,address,address,uint256,bytes)[])": "ceaedb9b"
  },
  "rawMetadata": "{\"compiler\":{\"version\":\"0.8.16+commit.07a7930e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"}],\"name\":\"BorrowingDisabledOnReserve\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"}],\"name\":\"BorrowingEnabledOnReserve\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"DebtTokenUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"FTokenUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maxNumberOfReserves\",\"type\":\"uint256\"}],\"name\":\"MaxNumberOfReservesChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"method\",\"type\":\"string\"}],\"name\":\"PriceConsumerAssetPriceMethodChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"method\",\"type\":\"string\"}],\"name\":\"PriceConsumerNftPriceMethodChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"}],\"name\":\"ReserveActivated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidationBonus\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"auctionDuration\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"auctionPriceMultiple\",\"type\":\"uint256\"}],\"name\":\"ReserveAuctionChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ltv\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidationThreshold\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidationBonus\",\"type\":\"uint256\"}],\"name\":\"ReserveCollateralConfigurationChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"}],\"name\":\"ReserveDeactivated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"factor\",\"type\":\"uint256\"}],\"name\":\"ReserveFactorChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"}],\"name\":\"ReserveFrozen\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"fToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"stableDebtToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"variableDebtToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"interestRateStrategyAddress\",\"type\":\"address\"}],\"name\":\"ReserveInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"strategy\",\"type\":\"address\"}],\"name\":\"ReserveInterestRateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maxSupply\",\"type\":\"uint256\"}],\"name\":\"ReserveMaxSupplyChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"redeemThreshold\",\"type\":\"uint256\"}],\"name\":\"ReserveRedeemThresholdChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"}],\"name\":\"ReserveUnfrozen\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"}],\"name\":\"VariableRateBorrowingDisabledOnReserve\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"}],\"name\":\"VariableRateBorrowingEnabledOnReserve\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"contracts\",\"type\":\"address[]\"}],\"name\":\"approveExecutionDelegateContracts\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"approveWETHExecutionDelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ltv\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gracePeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidationBonus\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidationThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"auctionDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"auctionPriceMultiple\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"borrowingEnabled\",\"type\":\"bool\"}],\"internalType\":\"struct ConfigTypes.ConfigReserveInput[]\",\"name\":\"inputs\",\"type\":\"tuple[]\"}],\"name\":\"batchConfigReserve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"underlyingCollateral\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"underlyingCollateralName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"underlyingCollateralSymbol\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"underlyingMaxTokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"underlyingMinTokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"underlyingAssetName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"underlyingAssetSymbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"underlyingAssetDecimals\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"fTokenImpl\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"fTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"fTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"stableDebtTokenImpl\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"stableDebtTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"stableDebtTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"variableDebtTokenImpl\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"variableDebtTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"variableDebtTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"interestRateStrategy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"baseLTV\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"creatorPercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"auctionCallerPercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"auctionCreatorPercentage\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"assetPriceFeed\",\"type\":\"string\"}],\"internalType\":\"struct ConfigTypes.InitReserveInput[]\",\"name\":\"input\",\"type\":\"tuple[]\"}],\"name\":\"batchInitLendingPoolReserve\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"reserveIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"liquidationBonus\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"auctionDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"auctionPriceMultiple\",\"type\":\"uint256\"}],\"name\":\"configureReserveAuction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addressProvider\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"reserveIds\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"name\":\"setActiveFlagOnReserve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"reserveIds\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"name\":\"setBorrowingFlagOnReserve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"reserveIds\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"name\":\"setFreezeFlagOnReserve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newVal\",\"type\":\"uint256\"}],\"name\":\"setMaxNumberOfReserves\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"val\",\"type\":\"bool\"}],\"name\":\"setPoolPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"durationTime\",\"type\":\"uint256\"}],\"name\":\"setPoolPausedTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"}],\"name\":\"setReserveCreatorAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"percentage\",\"type\":\"uint256\"}],\"name\":\"setReserveCreatorPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"reserveIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"reserveFactor\",\"type\":\"uint256\"}],\"name\":\"setReserveFactor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"reserveIds\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"rateAddress\",\"type\":\"address\"}],\"name\":\"setReserveInterestRateAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"reserveIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"maxSupply\",\"type\":\"uint256\"}],\"name\":\"setReserveMaxSupply\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"reserveIds\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"name\":\"setVariableRateBorrowingFlagOnReserve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"encodedCallData\",\"type\":\"bytes\"}],\"internalType\":\"struct ConfigTypes.UpdateFTokenInput[]\",\"name\":\"inputs\",\"type\":\"tuple[]\"}],\"name\":\"updateFToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"encodedCallData\",\"type\":\"bytes\"}],\"internalType\":\"struct ConfigTypes.UpdateDebtTokenInput[]\",\"name\":\"inputs\",\"type\":\"tuple[]\"}],\"name\":\"updateStableDebtToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"encodedCallData\",\"type\":\"bytes\"}],\"internalType\":\"struct ConfigTypes.UpdateDebtTokenInput[]\",\"name\":\"inputs\",\"type\":\"tuple[]\"}],\"name\":\"updateVariableDebtToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"FluidNFT\",\"details\":\"Implements the confiurations mehtods for the FluidNFT protocol.\",\"kind\":\"dev\",\"methods\":{\"configureReserveAuction(uint256[],uint256,uint256,uint256)\":{\"details\":\"Configures the Reserve auction parameters\",\"params\":{\"auctionDuration\":\"The duration of the auction\",\"auctionPriceMultiple\":\"The dutch auction start price multiplier*\",\"liquidationBonus\":\"The bonus received by the protocol on liquidating this asset.\",\"reserveIds\":\"Reserve ids\"}},\"setPoolPause(bool)\":{\"details\":\"pauses or unpauses all the actions of the protocol, including fToken transfers\",\"params\":{\"val\":\"true if protocol needs to be paused, false otherwise*\"}},\"setReserveCreatorAddress(uint256,address)\":{\"details\":\"Updates the reserve creator address within the fToken contract via the lendingPool (proxy admin)\"},\"setReserveCreatorPercentage(uint256,uint256)\":{\"details\":\"Updates the reserve creator percentage within the fToken contract via the lendingPool (proxy admin)\"},\"setReserveFactor(uint256[],uint256)\":{\"details\":\"Updates the reserve factor of a reserve\",\"params\":{\"reserveFactor\":\"The new reserve factor of the reserve*\",\"reserveIds\":\"The ids of the reserves\"}},\"setReserveInterestRateAddress(uint256[],address)\":{\"details\":\"Sets the interest rate strategy of a reserve\",\"params\":{\"rateAddress\":\"The new address of the interest strategy contract*\",\"reserveIds\":\"The ids of the reserves\"}},\"updateFToken((address,address,address,uint256,bytes)[])\":{\"details\":\"Updates the fToken implementation for the reserve*\"},\"updateStableDebtToken((address,address,address,uint256,bytes)[])\":{\"details\":\"Updates the stable debt token implementation for the reserve*\"},\"updateVariableDebtToken((address,address,address,uint256,bytes)[])\":{\"details\":\"Updates the debt token implementation for the reserve*\"}},\"title\":\"Configuration contract for the FluidNFT protocol.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/protocol/governance/Configurator.sol\":\"Configurator\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@chainlink/=lib/chainlink/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":chainlink/=lib/chainlink/integration-tests/contracts/ethereum/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://899f850f7df5a270bccfb765d70069959ca1c20d3a7381c1c3bda8a3ffee1935\",\"dweb:/ipfs/QmVdnAqwyX2L3nX2HDA5WKGtVBFyH1nKE9A1k7fZnPBkhP\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol\":{\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2\",\"dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d\",\"dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://72460c66cd1c3b1c11b863e0d8df0a1c56f37743019e468dc312c754f43e3b06\",\"dweb:/ipfs/QmPExYKiNb9PUsgktQBupPaM33kzDHxaYoVeJdLhv8s879\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688\",\"dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr\"]},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol\":{\"keccak256\":\"0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5\",\"dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn\"]},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol\":{\"keccak256\":\"0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8\",\"dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725\"]},\"lib/openzeppelin-contracts/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472\",\"dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN\"]},\"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354\",\"dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce\"]},\"lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"keccak256\":\"0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1\",\"dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ec772b45a624be516f1c81970caa8a2e144301e9d0921cbc1a2789fef39a1269\",\"dweb:/ipfs/QmNyjwxCrGhQMyzLD93oUobJXVe9ceJvRvfXwbEtuxPiEj\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4\",\"dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B\"]},\"src/interfaces/IAddressProvider.sol\":{\"keccak256\":\"0x6730abfcd8770e3279dad6137bf619ab98ee8b049e6dd85d2fbe87ba6224fde8\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://9b7d1588eab025b049f858ab2f329be7fec220198d956b9b61bf0b9bddc5761a\",\"dweb:/ipfs/QmTaFkYSUfWmbpsyE2TKC1QvP6eTDggZ72ZWodBhydqt5X\"]},\"src/interfaces/ICollateralManager.sol\":{\"keccak256\":\"0xdcb90cae810d15c23e0606ef3d9b30feec7d35e956082b88c1f35c5d6caf6438\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://c45a3cf14add38004018f32987cab971436cfd2e679eea71f2383f845bd68647\",\"dweb:/ipfs/QmPd9df3JmDFMHnhreYWw8tjmRGEQAtERnqj2YREXB5aP5\"]},\"src/interfaces/IConfigurator.sol\":{\"keccak256\":\"0x39a8045982269f806b611033dc74b844a26faa5376dabe26a8e0eaeb2b457ed2\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://2e61c2b8df0daed7e900d2dcd89ae94a8a60d1b5551038d46726bf2c195102c8\",\"dweb:/ipfs/QmPwJzTcem2d72YbmySWJXLnHazpWQqmpXmnmmGZsT1Cwg\"]},\"src/interfaces/IExecutionDelegate.sol\":{\"keccak256\":\"0x9def180c3c45c492a967182aac61849fc1a77ca9f958abd3f27b689b01e61401\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cf406e8af1c9fa6373a66615022cd5c7edc41c169c46d660d5383df6647d3a5d\",\"dweb:/ipfs/QmRz7aDGbabWAw3BGFV2kbSmehGizSz3f7W87k6VXR3ggR\"]},\"src/interfaces/IFToken.sol\":{\"keccak256\":\"0x4c3ebc83c05720c9257d1b6b4930b647c08ba766b76928622a4c91c4a541a718\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://920cb41d52a659b88030fc3cf84fe5a87cc42f0c6e5c83a691c4732f84906689\",\"dweb:/ipfs/Qma657T4np5eBNono5yBXxE71jfT1TRDDkCPpH3kfw3SxM\"]},\"src/interfaces/IInitializableDebtToken.sol\":{\"keccak256\":\"0x29bcf86201c67f90d1620b5da4a0de05c611bf1fb15afeb6d2b30a70ec8aebca\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://e17c25e400ac37f1cd29b9cfdba2d4bc34aa6e0c705a619acf0c69f9136150d6\",\"dweb:/ipfs/QmTcNqEpq8UbZf6o6AgwJVjuNbrNbsZWfRMhQnuZArJQ6Q\"]},\"src/interfaces/ILendingPool.sol\":{\"keccak256\":\"0x345ab4285354bb5184bdd501d7c37920a711215b6f6c2db05b05d585f2454115\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://3b6264b135760dcdd59b9a3566c1305b00084922da177159a85c206ef6a91266\",\"dweb:/ipfs/QmSotEH7zF3vrEgo2gZuunWwroHgc6bw7TVRntzv7jsJn1\"]},\"src/interfaces/IPoolIncentivesController.sol\":{\"keccak256\":\"0x7cb2c32050814e6d6d962a603104facc3bb1dad15171304e3ee756648e8f9ae1\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://cf534f592706b2a61c539c03e5d1e199c15472bcfb4ee69838e5c93ba7914466\",\"dweb:/ipfs/QmPrvXhJigK1Ke51YwAWHon1Kv88WT26iD3MwzCaPDs1Kv\"]},\"src/interfaces/IScaledBalanceToken.sol\":{\"keccak256\":\"0xb6a8f00773c5f58af761573f39f6aa3649c9deec5c4e078f5e3ca78940e4eac7\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://0938c6fd92b015670a2bcf5ff971aafbc6295e07c78d1300c5e36a67002dc70c\",\"dweb:/ipfs/QmYDcxNaAAfnupwDcDN1xtQcCEXTwW1FWiaTiU3MksCQ1Z\"]},\"src/interfaces/IStableDebtToken.sol\":{\"keccak256\":\"0x964a76facf6d0ea459fd0222c5e8036efea4e9193af3851d68190052037755b4\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://6eebeccfdd76a6e7691402b699c1185df09e8fe80c94cc059bd797a2931b9d3e\",\"dweb:/ipfs/QmeRY3xnu979DmjgFZSEaNgEkWgjtj4Hjpg9gW3bMoaZ1v\"]},\"src/interfaces/IVariableDebtToken.sol\":{\"keccak256\":\"0x61d5cce91604a2d97218fdf1f53022e08061aae2adc6dc5fb0ba311d46a212cc\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://e8e62cce1a93aafcff2438c111ca7af77c8c2a6ed3d5c7ffce2598aa73fb87c9\",\"dweb:/ipfs/QmXXpq9J65pU5Wt9WUR1sZMjss2gUDfEvpDAc9npQfxGcC\"]},\"src/interfaces/IWETHGateway.sol\":{\"keccak256\":\"0x831ca4e10b8d5094c6b604e838d0d144aee306027455d0fa74f72f9092bf0a58\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://e216cc7934d2c89de2cd39f5d50b2c812c1fcacc89067537c7787a9a2ec43740\",\"dweb:/ipfs/QmNwFnCpMU3XWHzCx6npHj3gMyXnrDVT6EAzbj9NQNPHMt\"]},\"src/protocol/governance/Configurator.sol\":{\"keccak256\":\"0x0567bf267e3fb54adbb27e07ee664088204eec8c908b4af9aa20157ffc9959c3\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://1eaeb1bc8e1e02f89080fd3067ab88cd486ba25d7584cfa41768b42b4424a392\",\"dweb:/ipfs/QmXxJUcDooNLS1txBE9NMY1QYKYHGiDVYqRX7k31327DzD\"]},\"src/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"keccak256\":\"0xa185efd08f4a3798bbafaa90fafd310f2e29634a2f83b62ee833b31a24232e3c\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://806a0ce876edbbbd418a8297735f66907a06650606b00eac5b510ab082ed3173\",\"dweb:/ipfs/QmQk5ybFrVqXfgXbndYcKBoQiahKScjFEABpJ3ATG8SYPh\"]},\"src/protocol/libraries/helpers/Errors.sol\":{\"keccak256\":\"0x490e76871922e89a13ba0bb88977be18c143fa9d0cd9afb033744a3d81479c52\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://1c409d4d1e1689d8d8f3c3e361198d20f3b6476608c5316d8e2d91f52373e8e3\",\"dweb:/ipfs/QmRZaYpxqjmBpbxb51KqswKYPSeCsU3ejbmk5E3MrMxJaM\"]},\"src/protocol/libraries/logic/ConfiguratorLogic.sol\":{\"keccak256\":\"0xb97b103d5ef982c9e8886ad457bd7f2efbe281ab51e5b3fe150f4ec04eeeea0c\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://f05e5b6181195d1ce3b0e7a7aa55cea27a593a052fd7173ea5fd8f368494268e\",\"dweb:/ipfs/QmQLtKvLx9YnkVkdz1CoTdsDUv1vyyrkmfK2LMz1HNRj28\"]},\"src/protocol/libraries/math/PercentageMath.sol\":{\"keccak256\":\"0xb84274fc3effba81036256cf7fde67b3dbfe86c4ffd0e062711a3270157952a2\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://3ecaf26e713b39d89ee21fb8bfefe55fe2fec4a2f5a2bffba7612f82182b7262\",\"dweb:/ipfs/QmZ6oXpNspwBEkiJEz1EhsU4EVBpG3anNjtzcycNEgAkfe\"]},\"src/protocol/libraries/proxy/FluidUpgradeableProxy.sol\":{\"keccak256\":\"0xebb381972c1d982d6cc8c2b1a704f9f2fefb75433e0adc84f896186da8ba2599\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://3706756fd653002ba56734f0f699decd7ba38993744a951acf0b259a95549087\",\"dweb:/ipfs/QmdZceFBVbYzBKZaQDfWEKYggJGxJ8G1j9ZWBrWLbozRZz\"]},\"src/protocol/libraries/types/ConfigTypes.sol\":{\"keccak256\":\"0xa8f9b14d9adf738033fd1847b30012d0e022027614fd6c9bb31a01bc6bfb1634\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://b20c579d1b683dd5977a675c2e46adeebd56c96faa68cda9b0767edf02a5b650\",\"dweb:/ipfs/QmPULpaX2ouktArvXJxYNVPQ9vKBhEeCYA4smo8v57qFLD\"]},\"src/protocol/libraries/types/DataTypes.sol\":{\"keccak256\":\"0x070f7865fe84ce4c9ebd86bbe24771607fbdb4e8777510b46cb5064e4d9b90a3\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://504fd0c937cc69cc0737c4ef5dcec477017ccbff609b45b210274fd7bf0792cf\",\"dweb:/ipfs/QmeW1TkAHib7XRBVmgMRTdmsa4Rg9HVToTMnifEE1C7mTi\"]}},\"version\":1}",
  "metadata": {
    "compiler": {
      "version": "0.8.16+commit.07a7930e"
    },
    "language": "Solidity",
    "output": {
      "abi": [
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "BorrowingDisabledOnReserve",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "BorrowingEnabledOnReserve",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "collateral",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "address",
              "name": "asset",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "address",
              "name": "proxy",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "implementation",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "DebtTokenUpgraded",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "collateral",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "address",
              "name": "asset",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "address",
              "name": "proxy",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "implementation",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "FTokenUpgraded",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint8",
              "name": "version",
              "type": "uint8",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Initialized",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "maxNumberOfReserves",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "MaxNumberOfReservesChanged",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "string",
              "name": "method",
              "type": "string",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "PriceConsumerAssetPriceMethodChanged",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "string",
              "name": "method",
              "type": "string",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "PriceConsumerNftPriceMethodChanged",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "ReserveActivated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "liquidationBonus",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "auctionDuration",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "auctionPriceMultiple",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "ReserveAuctionChanged",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "ltv",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "liquidationThreshold",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "liquidationBonus",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "ReserveCollateralConfigurationChanged",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "ReserveDeactivated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "factor",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "ReserveFactorChanged",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "ReserveFrozen",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "collateral",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "asset",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "fToken",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "address",
              "name": "stableDebtToken",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "address",
              "name": "variableDebtToken",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "address",
              "name": "interestRateStrategyAddress",
              "type": "address",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "ReserveInitialized",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "strategy",
              "type": "address",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "ReserveInterestRateChanged",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "maxSupply",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "ReserveMaxSupplyChanged",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "redeemThreshold",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "ReserveRedeemThresholdChanged",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "ReserveUnfrozen",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "VariableRateBorrowingDisabledOnReserve",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "VariableRateBorrowingEnabledOnReserve",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address[]",
              "name": "contracts",
              "type": "address[]"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "approveExecutionDelegateContracts"
        },
        {
          "inputs": [],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "approveWETHExecutionDelegate"
        },
        {
          "inputs": [
            {
              "internalType": "struct ConfigTypes.ConfigReserveInput[]",
              "name": "inputs",
              "type": "tuple[]",
              "components": [
                {
                  "internalType": "uint256",
                  "name": "reserveId",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "reserveFactor",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "ltv",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "decimals",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "gracePeriod",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "liquidationBonus",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "liquidationThreshold",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "auctionDuration",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "auctionPriceMultiple",
                  "type": "uint256"
                },
                {
                  "internalType": "bool",
                  "name": "borrowingEnabled",
                  "type": "bool"
                }
              ]
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "batchConfigReserve"
        },
        {
          "inputs": [
            {
              "internalType": "struct ConfigTypes.InitReserveInput[]",
              "name": "input",
              "type": "tuple[]",
              "components": [
                {
                  "internalType": "address",
                  "name": "underlyingCollateral",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "underlyingCollateralName",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "underlyingCollateralSymbol",
                  "type": "string"
                },
                {
                  "internalType": "uint256",
                  "name": "underlyingMaxTokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "underlyingMinTokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "underlyingAsset",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "underlyingAssetName",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "underlyingAssetSymbol",
                  "type": "string"
                },
                {
                  "internalType": "uint8",
                  "name": "underlyingAssetDecimals",
                  "type": "uint8"
                },
                {
                  "internalType": "address",
                  "name": "fTokenImpl",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "fTokenName",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "fTokenSymbol",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "stableDebtTokenImpl",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "stableDebtTokenName",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "stableDebtTokenSymbol",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "variableDebtTokenImpl",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "variableDebtTokenName",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "variableDebtTokenSymbol",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "interestRateStrategy",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "baseLTV",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "treasury",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "creator",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "creatorPercentage",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "auctionCallerPercentage",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "auctionCreatorPercentage",
                  "type": "uint256"
                },
                {
                  "internalType": "string",
                  "name": "assetPriceFeed",
                  "type": "string"
                }
              ]
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "batchInitLendingPoolReserve",
          "outputs": [
            {
              "internalType": "address[]",
              "name": "",
              "type": "address[]"
            },
            {
              "internalType": "address[]",
              "name": "",
              "type": "address[]"
            },
            {
              "internalType": "address[]",
              "name": "",
              "type": "address[]"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256[]",
              "name": "reserveIds",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256",
              "name": "liquidationBonus",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "auctionDuration",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "auctionPriceMultiple",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "configureReserveAuction"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "addressProvider",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "initialize"
        },
        {
          "inputs": [
            {
              "internalType": "uint256[]",
              "name": "reserveIds",
              "type": "uint256[]"
            },
            {
              "internalType": "bool",
              "name": "flag",
              "type": "bool"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setActiveFlagOnReserve"
        },
        {
          "inputs": [
            {
              "internalType": "uint256[]",
              "name": "reserveIds",
              "type": "uint256[]"
            },
            {
              "internalType": "bool",
              "name": "flag",
              "type": "bool"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setBorrowingFlagOnReserve"
        },
        {
          "inputs": [
            {
              "internalType": "uint256[]",
              "name": "reserveIds",
              "type": "uint256[]"
            },
            {
              "internalType": "bool",
              "name": "flag",
              "type": "bool"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setFreezeFlagOnReserve"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "newVal",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setMaxNumberOfReserves"
        },
        {
          "inputs": [
            {
              "internalType": "bool",
              "name": "val",
              "type": "bool"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setPoolPause"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "startTime",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "durationTime",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setPoolPausedTime"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "creator",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setReserveCreatorAddress"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "percentage",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setReserveCreatorPercentage"
        },
        {
          "inputs": [
            {
              "internalType": "uint256[]",
              "name": "reserveIds",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256",
              "name": "reserveFactor",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setReserveFactor"
        },
        {
          "inputs": [
            {
              "internalType": "uint256[]",
              "name": "reserveIds",
              "type": "uint256[]"
            },
            {
              "internalType": "address",
              "name": "rateAddress",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setReserveInterestRateAddress"
        },
        {
          "inputs": [
            {
              "internalType": "uint256[]",
              "name": "reserveIds",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256",
              "name": "maxSupply",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setReserveMaxSupply"
        },
        {
          "inputs": [
            {
              "internalType": "uint256[]",
              "name": "reserveIds",
              "type": "uint256[]"
            },
            {
              "internalType": "bool",
              "name": "flag",
              "type": "bool"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setVariableRateBorrowingFlagOnReserve"
        },
        {
          "inputs": [
            {
              "internalType": "struct ConfigTypes.UpdateFTokenInput[]",
              "name": "inputs",
              "type": "tuple[]",
              "components": [
                {
                  "internalType": "address",
                  "name": "collateral",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "asset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "implementation",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "reserveId",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "encodedCallData",
                  "type": "bytes"
                }
              ]
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "updateFToken"
        },
        {
          "inputs": [
            {
              "internalType": "struct ConfigTypes.UpdateDebtTokenInput[]",
              "name": "inputs",
              "type": "tuple[]",
              "components": [
                {
                  "internalType": "address",
                  "name": "collateral",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "asset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "implementation",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "reserveId",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "encodedCallData",
                  "type": "bytes"
                }
              ]
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "updateStableDebtToken"
        },
        {
          "inputs": [
            {
              "internalType": "struct ConfigTypes.UpdateDebtTokenInput[]",
              "name": "inputs",
              "type": "tuple[]",
              "components": [
                {
                  "internalType": "address",
                  "name": "collateral",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "asset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "implementation",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "reserveId",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "encodedCallData",
                  "type": "bytes"
                }
              ]
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "updateVariableDebtToken"
        }
      ],
      "devdoc": {
        "kind": "dev",
        "methods": {
          "configureReserveAuction(uint256[],uint256,uint256,uint256)": {
            "details": "Configures the Reserve auction parameters",
            "params": {
              "auctionDuration": "The duration of the auction",
              "auctionPriceMultiple": "The dutch auction start price multiplier*",
              "liquidationBonus": "The bonus received by the protocol on liquidating this asset.",
              "reserveIds": "Reserve ids"
            }
          },
          "setPoolPause(bool)": {
            "details": "pauses or unpauses all the actions of the protocol, including fToken transfers",
            "params": {
              "val": "true if protocol needs to be paused, false otherwise*"
            }
          },
          "setReserveCreatorAddress(uint256,address)": {
            "details": "Updates the reserve creator address within the fToken contract via the lendingPool (proxy admin)"
          },
          "setReserveCreatorPercentage(uint256,uint256)": {
            "details": "Updates the reserve creator percentage within the fToken contract via the lendingPool (proxy admin)"
          },
          "setReserveFactor(uint256[],uint256)": {
            "details": "Updates the reserve factor of a reserve",
            "params": {
              "reserveFactor": "The new reserve factor of the reserve*",
              "reserveIds": "The ids of the reserves"
            }
          },
          "setReserveInterestRateAddress(uint256[],address)": {
            "details": "Sets the interest rate strategy of a reserve",
            "params": {
              "rateAddress": "The new address of the interest strategy contract*",
              "reserveIds": "The ids of the reserves"
            }
          },
          "updateFToken((address,address,address,uint256,bytes)[])": {
            "details": "Updates the fToken implementation for the reserve*"
          },
          "updateStableDebtToken((address,address,address,uint256,bytes)[])": {
            "details": "Updates the stable debt token implementation for the reserve*"
          },
          "updateVariableDebtToken((address,address,address,uint256,bytes)[])": {
            "details": "Updates the debt token implementation for the reserve*"
          }
        },
        "version": 1
      },
      "userdoc": {
        "kind": "user",
        "methods": {},
        "version": 1
      }
    },
    "settings": {
      "remappings": [
        ":@chainlink/=lib/chainlink/",
        ":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
        ":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
        ":chainlink/=lib/chainlink/integration-tests/contracts/ethereum/src/",
        ":ds-test/=lib/forge-std/lib/ds-test/src/",
        ":forge-std/=lib/forge-std/src/"
      ],
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "metadata": {
        "bytecodeHash": "ipfs"
      },
      "compilationTarget": {
        "src/protocol/governance/Configurator.sol": "Configurator"
      },
      "libraries": {}
    },
    "sources": {
      "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": {
        "keccak256": "0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27",
        "urls": [
          "bzz-raw://899f850f7df5a270bccfb765d70069959ca1c20d3a7381c1c3bda8a3ffee1935",
          "dweb:/ipfs/QmVdnAqwyX2L3nX2HDA5WKGtVBFyH1nKE9A1k7fZnPBkhP"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": {
        "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff",
        "urls": [
          "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2",
          "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol": {
        "keccak256": "0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb",
        "urls": [
          "bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d",
          "dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": {
        "keccak256": "0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183",
        "urls": [
          "bzz-raw://72460c66cd1c3b1c11b863e0d8df0a1c56f37743019e468dc312c754f43e3b06",
          "dweb:/ipfs/QmPExYKiNb9PUsgktQBupPaM33kzDHxaYoVeJdLhv8s879"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": {
        "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149",
        "urls": [
          "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c",
          "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": {
        "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff",
        "urls": [
          "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688",
          "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": {
        "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d",
        "urls": [
          "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5",
          "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": {
        "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a",
        "urls": [
          "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8",
          "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": {
        "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27",
        "urls": [
          "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472",
          "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": {
        "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61",
        "urls": [
          "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354",
          "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": {
        "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9",
        "urls": [
          "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1",
          "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/Address.sol": {
        "keccak256": "0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1",
        "urls": [
          "bzz-raw://ec772b45a624be516f1c81970caa8a2e144301e9d0921cbc1a2789fef39a1269",
          "dweb:/ipfs/QmNyjwxCrGhQMyzLD93oUobJXVe9ceJvRvfXwbEtuxPiEj"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": {
        "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d",
        "urls": [
          "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4",
          "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B"
        ],
        "license": "MIT"
      },
      "src/interfaces/IAddressProvider.sol": {
        "keccak256": "0x6730abfcd8770e3279dad6137bf619ab98ee8b049e6dd85d2fbe87ba6224fde8",
        "urls": [
          "bzz-raw://9b7d1588eab025b049f858ab2f329be7fec220198d956b9b61bf0b9bddc5761a",
          "dweb:/ipfs/QmTaFkYSUfWmbpsyE2TKC1QvP6eTDggZ72ZWodBhydqt5X"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/ICollateralManager.sol": {
        "keccak256": "0xdcb90cae810d15c23e0606ef3d9b30feec7d35e956082b88c1f35c5d6caf6438",
        "urls": [
          "bzz-raw://c45a3cf14add38004018f32987cab971436cfd2e679eea71f2383f845bd68647",
          "dweb:/ipfs/QmPd9df3JmDFMHnhreYWw8tjmRGEQAtERnqj2YREXB5aP5"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/IConfigurator.sol": {
        "keccak256": "0x39a8045982269f806b611033dc74b844a26faa5376dabe26a8e0eaeb2b457ed2",
        "urls": [
          "bzz-raw://2e61c2b8df0daed7e900d2dcd89ae94a8a60d1b5551038d46726bf2c195102c8",
          "dweb:/ipfs/QmPwJzTcem2d72YbmySWJXLnHazpWQqmpXmnmmGZsT1Cwg"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/IExecutionDelegate.sol": {
        "keccak256": "0x9def180c3c45c492a967182aac61849fc1a77ca9f958abd3f27b689b01e61401",
        "urls": [
          "bzz-raw://cf406e8af1c9fa6373a66615022cd5c7edc41c169c46d660d5383df6647d3a5d",
          "dweb:/ipfs/QmRz7aDGbabWAw3BGFV2kbSmehGizSz3f7W87k6VXR3ggR"
        ],
        "license": "MIT"
      },
      "src/interfaces/IFToken.sol": {
        "keccak256": "0x4c3ebc83c05720c9257d1b6b4930b647c08ba766b76928622a4c91c4a541a718",
        "urls": [
          "bzz-raw://920cb41d52a659b88030fc3cf84fe5a87cc42f0c6e5c83a691c4732f84906689",
          "dweb:/ipfs/Qma657T4np5eBNono5yBXxE71jfT1TRDDkCPpH3kfw3SxM"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/IInitializableDebtToken.sol": {
        "keccak256": "0x29bcf86201c67f90d1620b5da4a0de05c611bf1fb15afeb6d2b30a70ec8aebca",
        "urls": [
          "bzz-raw://e17c25e400ac37f1cd29b9cfdba2d4bc34aa6e0c705a619acf0c69f9136150d6",
          "dweb:/ipfs/QmTcNqEpq8UbZf6o6AgwJVjuNbrNbsZWfRMhQnuZArJQ6Q"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/ILendingPool.sol": {
        "keccak256": "0x345ab4285354bb5184bdd501d7c37920a711215b6f6c2db05b05d585f2454115",
        "urls": [
          "bzz-raw://3b6264b135760dcdd59b9a3566c1305b00084922da177159a85c206ef6a91266",
          "dweb:/ipfs/QmSotEH7zF3vrEgo2gZuunWwroHgc6bw7TVRntzv7jsJn1"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/IPoolIncentivesController.sol": {
        "keccak256": "0x7cb2c32050814e6d6d962a603104facc3bb1dad15171304e3ee756648e8f9ae1",
        "urls": [
          "bzz-raw://cf534f592706b2a61c539c03e5d1e199c15472bcfb4ee69838e5c93ba7914466",
          "dweb:/ipfs/QmPrvXhJigK1Ke51YwAWHon1Kv88WT26iD3MwzCaPDs1Kv"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/IScaledBalanceToken.sol": {
        "keccak256": "0xb6a8f00773c5f58af761573f39f6aa3649c9deec5c4e078f5e3ca78940e4eac7",
        "urls": [
          "bzz-raw://0938c6fd92b015670a2bcf5ff971aafbc6295e07c78d1300c5e36a67002dc70c",
          "dweb:/ipfs/QmYDcxNaAAfnupwDcDN1xtQcCEXTwW1FWiaTiU3MksCQ1Z"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/IStableDebtToken.sol": {
        "keccak256": "0x964a76facf6d0ea459fd0222c5e8036efea4e9193af3851d68190052037755b4",
        "urls": [
          "bzz-raw://6eebeccfdd76a6e7691402b699c1185df09e8fe80c94cc059bd797a2931b9d3e",
          "dweb:/ipfs/QmeRY3xnu979DmjgFZSEaNgEkWgjtj4Hjpg9gW3bMoaZ1v"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/IVariableDebtToken.sol": {
        "keccak256": "0x61d5cce91604a2d97218fdf1f53022e08061aae2adc6dc5fb0ba311d46a212cc",
        "urls": [
          "bzz-raw://e8e62cce1a93aafcff2438c111ca7af77c8c2a6ed3d5c7ffce2598aa73fb87c9",
          "dweb:/ipfs/QmXXpq9J65pU5Wt9WUR1sZMjss2gUDfEvpDAc9npQfxGcC"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/IWETHGateway.sol": {
        "keccak256": "0x831ca4e10b8d5094c6b604e838d0d144aee306027455d0fa74f72f9092bf0a58",
        "urls": [
          "bzz-raw://e216cc7934d2c89de2cd39f5d50b2c812c1fcacc89067537c7787a9a2ec43740",
          "dweb:/ipfs/QmNwFnCpMU3XWHzCx6npHj3gMyXnrDVT6EAzbj9NQNPHMt"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/governance/Configurator.sol": {
        "keccak256": "0x0567bf267e3fb54adbb27e07ee664088204eec8c908b4af9aa20157ffc9959c3",
        "urls": [
          "bzz-raw://1eaeb1bc8e1e02f89080fd3067ab88cd486ba25d7584cfa41768b42b4424a392",
          "dweb:/ipfs/QmXxJUcDooNLS1txBE9NMY1QYKYHGiDVYqRX7k31327DzD"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/configuration/ReserveConfiguration.sol": {
        "keccak256": "0xa185efd08f4a3798bbafaa90fafd310f2e29634a2f83b62ee833b31a24232e3c",
        "urls": [
          "bzz-raw://806a0ce876edbbbd418a8297735f66907a06650606b00eac5b510ab082ed3173",
          "dweb:/ipfs/QmQk5ybFrVqXfgXbndYcKBoQiahKScjFEABpJ3ATG8SYPh"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/helpers/Errors.sol": {
        "keccak256": "0x490e76871922e89a13ba0bb88977be18c143fa9d0cd9afb033744a3d81479c52",
        "urls": [
          "bzz-raw://1c409d4d1e1689d8d8f3c3e361198d20f3b6476608c5316d8e2d91f52373e8e3",
          "dweb:/ipfs/QmRZaYpxqjmBpbxb51KqswKYPSeCsU3ejbmk5E3MrMxJaM"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/logic/ConfiguratorLogic.sol": {
        "keccak256": "0xb97b103d5ef982c9e8886ad457bd7f2efbe281ab51e5b3fe150f4ec04eeeea0c",
        "urls": [
          "bzz-raw://f05e5b6181195d1ce3b0e7a7aa55cea27a593a052fd7173ea5fd8f368494268e",
          "dweb:/ipfs/QmQLtKvLx9YnkVkdz1CoTdsDUv1vyyrkmfK2LMz1HNRj28"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/math/PercentageMath.sol": {
        "keccak256": "0xb84274fc3effba81036256cf7fde67b3dbfe86c4ffd0e062711a3270157952a2",
        "urls": [
          "bzz-raw://3ecaf26e713b39d89ee21fb8bfefe55fe2fec4a2f5a2bffba7612f82182b7262",
          "dweb:/ipfs/QmZ6oXpNspwBEkiJEz1EhsU4EVBpG3anNjtzcycNEgAkfe"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/proxy/FluidUpgradeableProxy.sol": {
        "keccak256": "0xebb381972c1d982d6cc8c2b1a704f9f2fefb75433e0adc84f896186da8ba2599",
        "urls": [
          "bzz-raw://3706756fd653002ba56734f0f699decd7ba38993744a951acf0b259a95549087",
          "dweb:/ipfs/QmdZceFBVbYzBKZaQDfWEKYggJGxJ8G1j9ZWBrWLbozRZz"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/types/ConfigTypes.sol": {
        "keccak256": "0xa8f9b14d9adf738033fd1847b30012d0e022027614fd6c9bb31a01bc6bfb1634",
        "urls": [
          "bzz-raw://b20c579d1b683dd5977a675c2e46adeebd56c96faa68cda9b0767edf02a5b650",
          "dweb:/ipfs/QmPULpaX2ouktArvXJxYNVPQ9vKBhEeCYA4smo8v57qFLD"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/types/DataTypes.sol": {
        "keccak256": "0x070f7865fe84ce4c9ebd86bbe24771607fbdb4e8777510b46cb5064e4d9b90a3",
        "urls": [
          "bzz-raw://504fd0c937cc69cc0737c4ef5dcec477017ccbff609b45b210274fd7bf0792cf",
          "dweb:/ipfs/QmeW1TkAHib7XRBVmgMRTdmsa4Rg9HVToTMnifEE1C7mTi"
        ],
        "license": "AGPL-3.0"
      }
    },
    "version": 1
  },
  "ast": {
    "absolutePath": "src/protocol/governance/Configurator.sol",
    "id": 55223,
    "exportedSymbols": {
      "ConfigTypes": [
        64693
      ],
      "Configurator": [
        55222
      ],
      "ConfiguratorLogic": [
        59960
      ],
      "ContextUpgradeable": [
        28988
      ],
      "DataTypes": [
        65297
      ],
      "Errors": [
        57944
      ],
      "IAddressProvider": [
        46447
      ],
      "ICollateralManager": [
        46785
      ],
      "IConfigurator": [
        47089
      ],
      "IERC20Upgradeable": [
        27189
      ],
      "IExecutionDelegate": [
        47185
      ],
      "IFToken": [
        47449
      ],
      "ILendingPool": [
        48084
      ],
      "IStableDebtToken": [
        48707
      ],
      "IVariableDebtToken": [
        48815
      ],
      "IWETHGateway": [
        48998
      ],
      "Initializable": [
        26136
      ],
      "PercentageMath": [
        64257
      ],
      "ReserveConfiguration": [
        57547
      ]
    },
    "nodeType": "SourceUnit",
    "src": "38:15803:132",
    "nodes": [
      {
        "id": 53925,
        "nodeType": "PragmaDirective",
        "src": "38:23:132",
        "nodes": [],
        "literals": [
          "solidity",
          "0.8",
          ".16"
        ]
      },
      {
        "id": 53927,
        "nodeType": "ImportDirective",
        "src": "65:67:132",
        "nodes": [],
        "absolutePath": "src/interfaces/IConfigurator.sol",
        "file": "../../interfaces/IConfigurator.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 55223,
        "sourceUnit": 47090,
        "symbolAliases": [
          {
            "foreign": {
              "id": 53926,
              "name": "IConfigurator",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 47089,
              "src": "74:13:132",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 53929,
        "nodeType": "ImportDirective",
        "src": "134:65:132",
        "nodes": [],
        "absolutePath": "src/interfaces/ILendingPool.sol",
        "file": "../../interfaces/ILendingPool.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 55223,
        "sourceUnit": 48085,
        "symbolAliases": [
          {
            "foreign": {
              "id": 53928,
              "name": "ILendingPool",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 48084,
              "src": "143:12:132",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 53931,
        "nodeType": "ImportDirective",
        "src": "201:73:132",
        "nodes": [],
        "absolutePath": "src/interfaces/IAddressProvider.sol",
        "file": "../../interfaces/IAddressProvider.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 55223,
        "sourceUnit": 46448,
        "symbolAliases": [
          {
            "foreign": {
              "id": 53930,
              "name": "IAddressProvider",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 46447,
              "src": "210:16:132",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 53933,
        "nodeType": "ImportDirective",
        "src": "276:77:132",
        "nodes": [],
        "absolutePath": "src/interfaces/ICollateralManager.sol",
        "file": "../../interfaces/ICollateralManager.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 55223,
        "sourceUnit": 46786,
        "symbolAliases": [
          {
            "foreign": {
              "id": 53932,
              "name": "ICollateralManager",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 46785,
              "src": "285:18:132",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 53935,
        "nodeType": "ImportDirective",
        "src": "355:77:132",
        "nodes": [],
        "absolutePath": "src/interfaces/IExecutionDelegate.sol",
        "file": "../../interfaces/IExecutionDelegate.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 55223,
        "sourceUnit": 47186,
        "symbolAliases": [
          {
            "foreign": {
              "id": 53934,
              "name": "IExecutionDelegate",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 47185,
              "src": "364:18:132",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 53937,
        "nodeType": "ImportDirective",
        "src": "434:55:132",
        "nodes": [],
        "absolutePath": "src/interfaces/IFToken.sol",
        "file": "../../interfaces/IFToken.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 55223,
        "sourceUnit": 47450,
        "symbolAliases": [
          {
            "foreign": {
              "id": 53936,
              "name": "IFToken",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 47449,
              "src": "443:7:132",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 53939,
        "nodeType": "ImportDirective",
        "src": "491:73:132",
        "nodes": [],
        "absolutePath": "src/interfaces/IStableDebtToken.sol",
        "file": "../../interfaces/IStableDebtToken.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 55223,
        "sourceUnit": 48708,
        "symbolAliases": [
          {
            "foreign": {
              "id": 53938,
              "name": "IStableDebtToken",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 48707,
              "src": "500:16:132",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 53941,
        "nodeType": "ImportDirective",
        "src": "566:77:132",
        "nodes": [],
        "absolutePath": "src/interfaces/IVariableDebtToken.sol",
        "file": "../../interfaces/IVariableDebtToken.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 55223,
        "sourceUnit": 48816,
        "symbolAliases": [
          {
            "foreign": {
              "id": 53940,
              "name": "IVariableDebtToken",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 48815,
              "src": "575:18:132",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 53943,
        "nodeType": "ImportDirective",
        "src": "645:65:132",
        "nodes": [],
        "absolutePath": "src/interfaces/IWETHGateway.sol",
        "file": "../../interfaces/IWETHGateway.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 55223,
        "sourceUnit": 48999,
        "symbolAliases": [
          {
            "foreign": {
              "id": 53942,
              "name": "IWETHGateway",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 48998,
              "src": "654:12:132",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 53945,
        "nodeType": "ImportDirective",
        "src": "714:91:132",
        "nodes": [],
        "absolutePath": "src/protocol/libraries/configuration/ReserveConfiguration.sol",
        "file": "../libraries/configuration/ReserveConfiguration.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 55223,
        "sourceUnit": 57548,
        "symbolAliases": [
          {
            "foreign": {
              "id": 53944,
              "name": "ReserveConfiguration",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 57547,
              "src": "723:20:132",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 53947,
        "nodeType": "ImportDirective",
        "src": "807:77:132",
        "nodes": [],
        "absolutePath": "src/protocol/libraries/logic/ConfiguratorLogic.sol",
        "file": "../libraries/logic/ConfiguratorLogic.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 55223,
        "sourceUnit": 59961,
        "symbolAliases": [
          {
            "foreign": {
              "id": 53946,
              "name": "ConfiguratorLogic",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 59960,
              "src": "816:17:132",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 53949,
        "nodeType": "ImportDirective",
        "src": "886:65:132",
        "nodes": [],
        "absolutePath": "src/protocol/libraries/types/ConfigTypes.sol",
        "file": "../libraries/types/ConfigTypes.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 55223,
        "sourceUnit": 64694,
        "symbolAliases": [
          {
            "foreign": {
              "id": 53948,
              "name": "ConfigTypes",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 64693,
              "src": "895:11:132",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 53951,
        "nodeType": "ImportDirective",
        "src": "953:61:132",
        "nodes": [],
        "absolutePath": "src/protocol/libraries/types/DataTypes.sol",
        "file": "../libraries/types/DataTypes.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 55223,
        "sourceUnit": 65298,
        "symbolAliases": [
          {
            "foreign": {
              "id": 53950,
              "name": "DataTypes",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 65297,
              "src": "962:9:132",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 53953,
        "nodeType": "ImportDirective",
        "src": "1016:57:132",
        "nodes": [],
        "absolutePath": "src/protocol/libraries/helpers/Errors.sol",
        "file": "../libraries/helpers/Errors.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 55223,
        "sourceUnit": 57945,
        "symbolAliases": [
          {
            "foreign": {
              "id": 53952,
              "name": "Errors",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 57944,
              "src": "1025:6:132",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 53955,
        "nodeType": "ImportDirective",
        "src": "1075:70:132",
        "nodes": [],
        "absolutePath": "src/protocol/libraries/math/PercentageMath.sol",
        "file": "../libraries/math/PercentageMath.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 55223,
        "sourceUnit": 64258,
        "symbolAliases": [
          {
            "foreign": {
              "id": 53954,
              "name": "PercentageMath",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 64257,
              "src": "1084:14:132",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 53957,
        "nodeType": "ImportDirective",
        "src": "1149:98:132",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol",
        "file": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 55223,
        "sourceUnit": 26137,
        "symbolAliases": [
          {
            "foreign": {
              "id": 53956,
              "name": "Initializable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 26136,
              "src": "1158:13:132",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 53959,
        "nodeType": "ImportDirective",
        "src": "1249:106:132",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 55223,
        "sourceUnit": 27190,
        "symbolAliases": [
          {
            "foreign": {
              "id": 53958,
              "name": "IERC20Upgradeable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 27189,
              "src": "1258:17:132",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 53961,
        "nodeType": "ImportDirective",
        "src": "1357:102:132",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 55223,
        "sourceUnit": 28989,
        "symbolAliases": [
          {
            "foreign": {
              "id": 53960,
              "name": "ContextUpgradeable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 28988,
              "src": "1366:18:132",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 55222,
        "nodeType": "ContractDefinition",
        "src": "1621:14220:132",
        "nodes": [
          {
            "id": 53972,
            "nodeType": "UsingForDirective",
            "src": "1702:65:132",
            "nodes": [],
            "global": false,
            "libraryName": {
              "id": 53969,
              "name": "ReserveConfiguration",
              "nameLocations": [
                "1708:20:132"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 57547,
              "src": "1708:20:132"
            },
            "typeName": {
              "id": 53971,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 53970,
                "name": "DataTypes.ReserveConfigurationMap",
                "nameLocations": [
                  "1733:9:132",
                  "1743:23:132"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 64790,
                "src": "1733:33:132"
              },
              "referencedDeclaration": 64790,
              "src": "1733:33:132",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_storage_ptr",
                "typeString": "struct DataTypes.ReserveConfigurationMap"
              }
            }
          },
          {
            "id": 53975,
            "nodeType": "UsingForDirective",
            "src": "1773:33:132",
            "nodes": [],
            "global": false,
            "libraryName": {
              "id": 53973,
              "name": "PercentageMath",
              "nameLocations": [
                "1779:14:132"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 64257,
              "src": "1779:14:132"
            },
            "typeName": {
              "id": 53974,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1798:7:132",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 53978,
            "nodeType": "VariableDeclaration",
            "src": "1818:42:132",
            "nodes": [],
            "constant": false,
            "mutability": "mutable",
            "name": "_addressProvider",
            "nameLocation": "1844:16:132",
            "scope": 55222,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IAddressProvider_$46447",
              "typeString": "contract IAddressProvider"
            },
            "typeName": {
              "id": 53977,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 53976,
                "name": "IAddressProvider",
                "nameLocations": [
                  "1818:16:132"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 46447,
                "src": "1818:16:132"
              },
              "referencedDeclaration": 46447,
              "src": "1818:16:132",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IAddressProvider_$46447",
                "typeString": "contract IAddressProvider"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 53992,
            "nodeType": "FunctionDefinition",
            "src": "1869:135:132",
            "nodes": [],
            "body": {
              "id": 53991,
              "nodeType": "Block",
              "src": "1933:71:132",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 53989,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 53985,
                      "name": "_addressProvider",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 53978,
                      "src": "1944:16:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAddressProvider_$46447",
                        "typeString": "contract IAddressProvider"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 53987,
                          "name": "addressProvider",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 53980,
                          "src": "1980:15:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 53986,
                        "name": "IAddressProvider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 46447,
                        "src": "1963:16:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IAddressProvider_$46447_$",
                          "typeString": "type(contract IAddressProvider)"
                        }
                      },
                      "id": 53988,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1963:33:132",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAddressProvider_$46447",
                        "typeString": "contract IAddressProvider"
                      }
                    },
                    "src": "1944:52:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAddressProvider_$46447",
                      "typeString": "contract IAddressProvider"
                    }
                  },
                  "id": 53990,
                  "nodeType": "ExpressionStatement",
                  "src": "1944:52:132"
                }
              ]
            },
            "functionSelector": "c4d66de8",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 53983,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 53982,
                  "name": "initializer",
                  "nameLocations": [
                    "1921:11:132"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 26038,
                  "src": "1921:11:132"
                },
                "nodeType": "ModifierInvocation",
                "src": "1921:11:132"
              }
            ],
            "name": "initialize",
            "nameLocation": "1878:10:132",
            "parameters": {
              "id": 53981,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 53980,
                  "mutability": "mutable",
                  "name": "addressProvider",
                  "nameLocation": "1897:15:132",
                  "nodeType": "VariableDeclaration",
                  "scope": 53992,
                  "src": "1889:23:132",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 53979,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1889:7:132",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1888:25:132"
            },
            "returnParameters": {
              "id": 53984,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1933:0:132"
            },
            "scope": 55222,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 54007,
            "nodeType": "ModifierDefinition",
            "src": "2012:140:132",
            "nodes": [],
            "body": {
              "id": 54006,
              "nodeType": "Block",
              "src": "2035:117:132",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 54000,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 53995,
                              "name": "_addressProvider",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 53978,
                              "src": "2054:16:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAddressProvider_$46447",
                                "typeString": "contract IAddressProvider"
                              }
                            },
                            "id": 53996,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "2071:12:132",
                            "memberName": "getPoolAdmin",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 46301,
                            "src": "2054:29:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                              "typeString": "function () view external returns (address)"
                            }
                          },
                          "id": 53997,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2054:31:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 53998,
                            "name": "_msgSender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28973,
                            "src": "2089:10:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                              "typeString": "function () view returns (address)"
                            }
                          },
                          "id": 53999,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2089:12:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2054:47:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "expression": {
                          "id": 54001,
                          "name": "Errors",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 57944,
                          "src": "2103:6:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Errors_$57944_$",
                            "typeString": "type(library Errors)"
                          }
                        },
                        "id": 54002,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "2110:21:132",
                        "memberName": "CALLER_NOT_POOL_ADMIN",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 57559,
                        "src": "2103:28:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 53994,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2046:7:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 54003,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2046:86:132",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 54004,
                  "nodeType": "ExpressionStatement",
                  "src": "2046:86:132"
                },
                {
                  "id": 54005,
                  "nodeType": "PlaceholderStatement",
                  "src": "2143:1:132"
                }
              ]
            },
            "name": "onlyPoolAdmin",
            "nameLocation": "2021:13:132",
            "parameters": {
              "id": 53993,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2035:0:132"
            },
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 54022,
            "nodeType": "ModifierDefinition",
            "src": "2160:159:132",
            "nodes": [],
            "body": {
              "id": 54021,
              "nodeType": "Block",
              "src": "2188:131:132",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 54015,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 54010,
                              "name": "_addressProvider",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 53978,
                              "src": "2207:16:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IAddressProvider_$46447",
                                "typeString": "contract IAddressProvider"
                              }
                            },
                            "id": 54011,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "2224:17:132",
                            "memberName": "getEmergencyAdmin",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 46311,
                            "src": "2207:34:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                              "typeString": "function () view external returns (address)"
                            }
                          },
                          "id": 54012,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2207:36:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 54013,
                            "name": "_msgSender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28973,
                            "src": "2247:10:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                              "typeString": "function () view returns (address)"
                            }
                          },
                          "id": 54014,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2247:12:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2207:52:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "expression": {
                          "id": 54016,
                          "name": "Errors",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 57944,
                          "src": "2261:6:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Errors_$57944_$",
                            "typeString": "type(library Errors)"
                          }
                        },
                        "id": 54017,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "2268:30:132",
                        "memberName": "LPC_CALLER_NOT_EMERGENCY_ADMIN",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 57820,
                        "src": "2261:37:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 54009,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2199:7:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 54018,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2199:100:132",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 54019,
                  "nodeType": "ExpressionStatement",
                  "src": "2199:100:132"
                },
                {
                  "id": 54020,
                  "nodeType": "PlaceholderStatement",
                  "src": "2310:1:132"
                }
              ]
            },
            "name": "onlyEmergencyAdmin",
            "nameLocation": "2169:18:132",
            "parameters": {
              "id": 54008,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2188:0:132"
            },
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 54121,
            "nodeType": "FunctionDefinition",
            "src": "2327:803:132",
            "nodes": [],
            "body": {
              "id": 54120,
              "nodeType": "Block",
              "src": "2598:532:132",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    54044
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 54044,
                      "mutability": "mutable",
                      "name": "fProxies",
                      "nameLocation": "2626:8:132",
                      "nodeType": "VariableDeclaration",
                      "scope": 54120,
                      "src": "2609:25:132",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 54042,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2609:7:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 54043,
                        "nodeType": "ArrayTypeName",
                        "src": "2609:9:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 54051,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 54048,
                          "name": "input",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 54026,
                          "src": "2651:5:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_InitReserveInput_$64606_calldata_ptr_$dyn_calldata_ptr",
                            "typeString": "struct ConfigTypes.InitReserveInput calldata[] calldata"
                          }
                        },
                        "id": 54049,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "2657:6:132",
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "2651:12:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 54047,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "2637:13:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (address[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 54045,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2641:7:132",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 54046,
                        "nodeType": "ArrayTypeName",
                        "src": "2641:9:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      }
                    },
                    "id": 54050,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2637:27:132",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                      "typeString": "address[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2609:55:132"
                },
                {
                  "assignments": [
                    54056
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 54056,
                      "mutability": "mutable",
                      "name": "sdProxies",
                      "nameLocation": "2692:9:132",
                      "nodeType": "VariableDeclaration",
                      "scope": 54120,
                      "src": "2675:26:132",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 54054,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2675:7:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 54055,
                        "nodeType": "ArrayTypeName",
                        "src": "2675:9:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 54063,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 54060,
                          "name": "input",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 54026,
                          "src": "2718:5:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_InitReserveInput_$64606_calldata_ptr_$dyn_calldata_ptr",
                            "typeString": "struct ConfigTypes.InitReserveInput calldata[] calldata"
                          }
                        },
                        "id": 54061,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "2724:6:132",
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "2718:12:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 54059,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "2704:13:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (address[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 54057,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2708:7:132",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 54058,
                        "nodeType": "ArrayTypeName",
                        "src": "2708:9:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      }
                    },
                    "id": 54062,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2704:27:132",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                      "typeString": "address[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2675:56:132"
                },
                {
                  "assignments": [
                    54068
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 54068,
                      "mutability": "mutable",
                      "name": "vdProxies",
                      "nameLocation": "2759:9:132",
                      "nodeType": "VariableDeclaration",
                      "scope": 54120,
                      "src": "2742:26:132",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 54066,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2742:7:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 54067,
                        "nodeType": "ArrayTypeName",
                        "src": "2742:9:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 54075,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 54072,
                          "name": "input",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 54026,
                          "src": "2785:5:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_InitReserveInput_$64606_calldata_ptr_$dyn_calldata_ptr",
                            "typeString": "struct ConfigTypes.InitReserveInput calldata[] calldata"
                          }
                        },
                        "id": 54073,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "2791:6:132",
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "2785:12:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 54071,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "2771:13:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (address[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 54069,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2775:7:132",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 54070,
                        "nodeType": "ArrayTypeName",
                        "src": "2775:9:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      }
                    },
                    "id": 54074,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2771:27:132",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                      "typeString": "address[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2742:56:132"
                },
                {
                  "assignments": [
                    54078
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 54078,
                      "mutability": "mutable",
                      "name": "cachedPool",
                      "nameLocation": "2832:10:132",
                      "nodeType": "VariableDeclaration",
                      "scope": 54120,
                      "src": "2819:23:132",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ILendingPool_$48084",
                        "typeString": "contract ILendingPool"
                      },
                      "typeName": {
                        "id": 54077,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 54076,
                          "name": "ILendingPool",
                          "nameLocations": [
                            "2819:12:132"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 48084,
                          "src": "2819:12:132"
                        },
                        "referencedDeclaration": 48084,
                        "src": "2819:12:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$48084",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 54081,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 54079,
                      "name": "_getLendingPool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55221,
                      "src": "2845:15:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$48084_$",
                        "typeString": "function () view returns (contract ILendingPool)"
                      }
                    },
                    "id": 54080,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2845:17:132",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPool_$48084",
                      "typeString": "contract ILendingPool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2819:43:132"
                },
                {
                  "body": {
                    "id": 54113,
                    "nodeType": "Block",
                    "src": "2916:147:132",
                    "statements": [
                      {
                        "expression": {
                          "id": 54111,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "components": [
                              {
                                "baseExpression": {
                                  "id": 54093,
                                  "name": "fProxies",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 54044,
                                  "src": "2932:8:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "id": 54095,
                                "indexExpression": {
                                  "id": 54094,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 54083,
                                  "src": "2941:1:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "2932:11:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "baseExpression": {
                                  "id": 54096,
                                  "name": "sdProxies",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 54056,
                                  "src": "2945:9:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "id": 54098,
                                "indexExpression": {
                                  "id": 54097,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 54083,
                                  "src": "2955:1:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "2945:12:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "baseExpression": {
                                  "id": 54099,
                                  "name": "vdProxies",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 54068,
                                  "src": "2959:9:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "id": 54101,
                                "indexExpression": {
                                  "id": 54100,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 54083,
                                  "src": "2969:1:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "2959:12:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "id": 54102,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "2931:41:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_address_$",
                              "typeString": "tuple(address,address,address)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 54105,
                                "name": "_addressProvider",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 53978,
                                "src": "3012:16:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IAddressProvider_$46447",
                                  "typeString": "contract IAddressProvider"
                                }
                              },
                              {
                                "id": 54106,
                                "name": "cachedPool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54078,
                                "src": "3030:10:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ILendingPool_$48084",
                                  "typeString": "contract ILendingPool"
                                }
                              },
                              {
                                "baseExpression": {
                                  "id": 54107,
                                  "name": "input",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 54026,
                                  "src": "3042:5:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_InitReserveInput_$64606_calldata_ptr_$dyn_calldata_ptr",
                                    "typeString": "struct ConfigTypes.InitReserveInput calldata[] calldata"
                                  }
                                },
                                "id": 54109,
                                "indexExpression": {
                                  "id": 54108,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 54083,
                                  "src": "3048:1:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "3042:8:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_InitReserveInput_$64606_calldata_ptr",
                                  "typeString": "struct ConfigTypes.InitReserveInput calldata"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_IAddressProvider_$46447",
                                  "typeString": "contract IAddressProvider"
                                },
                                {
                                  "typeIdentifier": "t_contract$_ILendingPool_$48084",
                                  "typeString": "contract ILendingPool"
                                },
                                {
                                  "typeIdentifier": "t_struct$_InitReserveInput_$64606_calldata_ptr",
                                  "typeString": "struct ConfigTypes.InitReserveInput calldata"
                                }
                              ],
                              "expression": {
                                "id": 54103,
                                "name": "ConfiguratorLogic",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 59960,
                                "src": "2975:17:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_ConfiguratorLogic_$59960_$",
                                  "typeString": "type(library ConfiguratorLogic)"
                                }
                              },
                              "id": 54104,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "2993:18:132",
                              "memberName": "executeInitReserve",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 59644,
                              "src": "2975:36:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_delegatecall_nonpayable$_t_contract$_IAddressProvider_$46447_$_t_contract$_ILendingPool_$48084_$_t_struct$_InitReserveInput_$64606_memory_ptr_$returns$_t_address_$_t_address_$_t_address_$",
                                "typeString": "function (contract IAddressProvider,contract ILendingPool,struct ConfigTypes.InitReserveInput memory) returns (address,address,address)"
                              }
                            },
                            "id": 54110,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2975:76:132",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_address_$",
                              "typeString": "tuple(address,address,address)"
                            }
                          },
                          "src": "2931:120:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 54112,
                        "nodeType": "ExpressionStatement",
                        "src": "2931:120:132"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 54089,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 54086,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54083,
                      "src": "2893:1:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 54087,
                        "name": "input",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54026,
                        "src": "2897:5:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_InitReserveInput_$64606_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "struct ConfigTypes.InitReserveInput calldata[] calldata"
                        }
                      },
                      "id": 54088,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2903:6:132",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "2897:12:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2893:16:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 54114,
                  "initializationExpression": {
                    "assignments": [
                      54083
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 54083,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "2886:1:132",
                        "nodeType": "VariableDeclaration",
                        "scope": 54114,
                        "src": "2878:9:132",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 54082,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2878:7:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 54085,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 54084,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2890:1:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "2878:13:132"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 54091,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "2911:3:132",
                      "subExpression": {
                        "id": 54090,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54083,
                        "src": "2911:1:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 54092,
                    "nodeType": "ExpressionStatement",
                    "src": "2911:3:132"
                  },
                  "nodeType": "ForStatement",
                  "src": "2873:190:132"
                },
                {
                  "expression": {
                    "components": [
                      {
                        "id": 54115,
                        "name": "fProxies",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54044,
                        "src": "3091:8:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      {
                        "id": 54116,
                        "name": "sdProxies",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54056,
                        "src": "3101:9:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      {
                        "id": 54117,
                        "name": "vdProxies",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54068,
                        "src": "3112:9:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      }
                    ],
                    "id": 54118,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "3090:32:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$",
                      "typeString": "tuple(address[] memory,address[] memory,address[] memory)"
                    }
                  },
                  "functionReturnParameters": 54039,
                  "id": 54119,
                  "nodeType": "Return",
                  "src": "3083:39:132"
                }
              ]
            },
            "baseFunctions": [
              46955
            ],
            "functionSelector": "14699c65",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 54029,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 54028,
                  "name": "onlyPoolAdmin",
                  "nameLocations": [
                    "2455:13:132"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 54007,
                  "src": "2455:13:132"
                },
                "nodeType": "ModifierInvocation",
                "src": "2455:13:132"
              }
            ],
            "name": "batchInitLendingPoolReserve",
            "nameLocation": "2336:27:132",
            "parameters": {
              "id": 54027,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 54026,
                  "mutability": "mutable",
                  "name": "input",
                  "nameLocation": "2414:5:132",
                  "nodeType": "VariableDeclaration",
                  "scope": 54121,
                  "src": "2374:45:132",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_InitReserveInput_$64606_calldata_ptr_$dyn_calldata_ptr",
                    "typeString": "struct ConfigTypes.InitReserveInput[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 54024,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 54023,
                        "name": "ConfigTypes.InitReserveInput",
                        "nameLocations": [
                          "2374:11:132",
                          "2386:16:132"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 64606,
                        "src": "2374:28:132"
                      },
                      "referencedDeclaration": 64606,
                      "src": "2374:28:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_InitReserveInput_$64606_storage_ptr",
                        "typeString": "struct ConfigTypes.InitReserveInput"
                      }
                    },
                    "id": 54025,
                    "nodeType": "ArrayTypeName",
                    "src": "2374:30:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_InitReserveInput_$64606_storage_$dyn_storage_ptr",
                      "typeString": "struct ConfigTypes.InitReserveInput[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2363:63:132"
            },
            "returnParameters": {
              "id": 54039,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 54032,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 54121,
                  "src": "2501:16:132",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 54030,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "2501:7:132",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 54031,
                    "nodeType": "ArrayTypeName",
                    "src": "2501:9:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 54035,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 54121,
                  "src": "2533:16:132",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 54033,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "2533:7:132",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 54034,
                    "nodeType": "ArrayTypeName",
                    "src": "2533:9:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 54038,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 54121,
                  "src": "2565:16:132",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 54036,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "2565:7:132",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 54037,
                    "nodeType": "ArrayTypeName",
                    "src": "2565:9:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2486:106:132"
            },
            "scope": 55222,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 54205,
            "nodeType": "FunctionDefinition",
            "src": "3138:894:132",
            "nodes": [],
            "body": {
              "id": 54204,
              "nodeType": "Block",
              "src": "3289:743:132",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    54133
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 54133,
                      "mutability": "mutable",
                      "name": "cachedPool",
                      "nameLocation": "3313:10:132",
                      "nodeType": "VariableDeclaration",
                      "scope": 54204,
                      "src": "3300:23:132",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ILendingPool_$48084",
                        "typeString": "contract ILendingPool"
                      },
                      "typeName": {
                        "id": 54132,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 54131,
                          "name": "ILendingPool",
                          "nameLocations": [
                            "3300:12:132"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 48084,
                          "src": "3300:12:132"
                        },
                        "referencedDeclaration": 48084,
                        "src": "3300:12:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$48084",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 54136,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 54134,
                      "name": "_getLendingPool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55221,
                      "src": "3326:15:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$48084_$",
                        "typeString": "function () view returns (contract ILendingPool)"
                      }
                    },
                    "id": 54135,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3326:17:132",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPool_$48084",
                      "typeString": "contract ILendingPool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3300:43:132"
                },
                {
                  "body": {
                    "id": 54202,
                    "nodeType": "Block",
                    "src": "3402:623:132",
                    "statements": [
                      {
                        "assignments": [
                          54152
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 54152,
                            "mutability": "mutable",
                            "name": "currentConfig",
                            "nameLocation": "3458:13:132",
                            "nodeType": "VariableDeclaration",
                            "scope": 54202,
                            "src": "3417:54:132",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_memory_ptr",
                              "typeString": "struct DataTypes.ReserveConfigurationMap"
                            },
                            "typeName": {
                              "id": 54151,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 54150,
                                "name": "DataTypes.ReserveConfigurationMap",
                                "nameLocations": [
                                  "3417:9:132",
                                  "3427:23:132"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 64790,
                                "src": "3417:33:132"
                              },
                              "referencedDeclaration": 64790,
                              "src": "3417:33:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_storage_ptr",
                                "typeString": "struct DataTypes.ReserveConfigurationMap"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 54159,
                        "initialValue": {
                          "arguments": [
                            {
                              "baseExpression": {
                                "id": 54155,
                                "name": "reserveIds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54124,
                                "src": "3527:10:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                  "typeString": "uint256[] calldata"
                                }
                              },
                              "id": 54157,
                              "indexExpression": {
                                "id": 54156,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54138,
                                "src": "3538:1:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3527:13:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 54153,
                              "name": "cachedPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54133,
                              "src": "3474:10:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ILendingPool_$48084",
                                "typeString": "contract ILendingPool"
                              }
                            },
                            "id": 54154,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "3485:23:132",
                            "memberName": "getReserveConfiguration",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 47909,
                            "src": "3474:34:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$",
                              "typeString": "function (uint256) external returns (struct DataTypes.ReserveConfigurationMap memory)"
                            }
                          },
                          "id": 54158,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3474:81:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_memory_ptr",
                            "typeString": "struct DataTypes.ReserveConfigurationMap memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3417:138:132"
                      },
                      {
                        "condition": {
                          "id": 54160,
                          "name": "flag",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 54126,
                          "src": "3574:4:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 54174,
                          "nodeType": "Block",
                          "src": "3660:75:132",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "hexValue": "66616c7365",
                                    "id": 54171,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "bool",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "3713:5:132",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "value": "false"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "expression": {
                                    "id": 54168,
                                    "name": "currentConfig",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 54152,
                                    "src": "3679:13:132",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_memory_ptr",
                                      "typeString": "struct DataTypes.ReserveConfigurationMap memory"
                                    }
                                  },
                                  "id": 54170,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "3693:19:132",
                                  "memberName": "setBorrowingEnabled",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 57054,
                                  "src": "3679:33:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$_t_bool_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$",
                                    "typeString": "function (struct DataTypes.ReserveConfigurationMap memory,bool) pure"
                                  }
                                },
                                "id": 54172,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3679:40:132",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 54173,
                              "nodeType": "ExpressionStatement",
                              "src": "3679:40:132"
                            }
                          ]
                        },
                        "id": 54175,
                        "nodeType": "IfStatement",
                        "src": "3570:165:132",
                        "trueBody": {
                          "id": 54167,
                          "nodeType": "Block",
                          "src": "3580:74:132",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "hexValue": "74727565",
                                    "id": 54164,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "bool",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "3633:4:132",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "value": "true"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "expression": {
                                    "id": 54161,
                                    "name": "currentConfig",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 54152,
                                    "src": "3599:13:132",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_memory_ptr",
                                      "typeString": "struct DataTypes.ReserveConfigurationMap memory"
                                    }
                                  },
                                  "id": 54163,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "3613:19:132",
                                  "memberName": "setBorrowingEnabled",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 57054,
                                  "src": "3599:33:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$_t_bool_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$",
                                    "typeString": "function (struct DataTypes.ReserveConfigurationMap memory,bool) pure"
                                  }
                                },
                                "id": 54165,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3599:39:132",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 54166,
                              "nodeType": "ExpressionStatement",
                              "src": "3599:39:132"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "baseExpression": {
                                "id": 54179,
                                "name": "reserveIds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54124,
                                "src": "3786:10:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                  "typeString": "uint256[] calldata"
                                }
                              },
                              "id": 54181,
                              "indexExpression": {
                                "id": 54180,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54138,
                                "src": "3797:1:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3786:13:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "expression": {
                                "id": 54182,
                                "name": "currentConfig",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54152,
                                "src": "3801:13:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_memory_ptr",
                                  "typeString": "struct DataTypes.ReserveConfigurationMap memory"
                                }
                              },
                              "id": 54183,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "3815:4:132",
                              "memberName": "data",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 64789,
                              "src": "3801:18:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 54176,
                              "name": "cachedPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54133,
                              "src": "3751:10:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ILendingPool_$48084",
                                "typeString": "contract ILendingPool"
                              }
                            },
                            "id": 54178,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "3762:23:132",
                            "memberName": "setReserveConfiguration",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 48058,
                            "src": "3751:34:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (uint256,uint256) external"
                            }
                          },
                          "id": 54184,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3751:69:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 54185,
                        "nodeType": "ExpressionStatement",
                        "src": "3751:69:132"
                      },
                      {
                        "condition": {
                          "id": 54186,
                          "name": "flag",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 54126,
                          "src": "3841:4:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 54200,
                          "nodeType": "Block",
                          "src": "3933:81:132",
                          "statements": [
                            {
                              "eventCall": {
                                "arguments": [
                                  {
                                    "baseExpression": {
                                      "id": 54195,
                                      "name": "reserveIds",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 54124,
                                      "src": "3984:10:132",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                        "typeString": "uint256[] calldata"
                                      }
                                    },
                                    "id": 54197,
                                    "indexExpression": {
                                      "id": 54196,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 54138,
                                      "src": "3995:1:132",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "3984:13:132",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 54194,
                                  "name": "BorrowingDisabledOnReserve",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 46801,
                                  "src": "3957:26:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256)"
                                  }
                                },
                                "id": 54198,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3957:41:132",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 54199,
                              "nodeType": "EmitStatement",
                              "src": "3952:46:132"
                            }
                          ]
                        },
                        "id": 54201,
                        "nodeType": "IfStatement",
                        "src": "3837:177:132",
                        "trueBody": {
                          "id": 54193,
                          "nodeType": "Block",
                          "src": "3847:80:132",
                          "statements": [
                            {
                              "eventCall": {
                                "arguments": [
                                  {
                                    "baseExpression": {
                                      "id": 54188,
                                      "name": "reserveIds",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 54124,
                                      "src": "3897:10:132",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                        "typeString": "uint256[] calldata"
                                      }
                                    },
                                    "id": 54190,
                                    "indexExpression": {
                                      "id": 54189,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 54138,
                                      "src": "3908:1:132",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "3897:13:132",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 54187,
                                  "name": "BorrowingEnabledOnReserve",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 46796,
                                  "src": "3871:25:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256)"
                                  }
                                },
                                "id": 54191,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3871:40:132",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 54192,
                              "nodeType": "EmitStatement",
                              "src": "3866:45:132"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 54144,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 54141,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54138,
                      "src": "3374:1:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 54142,
                        "name": "reserveIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54124,
                        "src": "3378:10:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      "id": 54143,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "3389:6:132",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "3378:17:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3374:21:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 54203,
                  "initializationExpression": {
                    "assignments": [
                      54138
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 54138,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "3367:1:132",
                        "nodeType": "VariableDeclaration",
                        "scope": 54203,
                        "src": "3359:9:132",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 54137,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3359:7:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 54140,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 54139,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3371:1:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "3359:13:132"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 54146,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "3397:3:132",
                      "subExpression": {
                        "id": 54145,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54138,
                        "src": "3397:1:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 54147,
                    "nodeType": "ExpressionStatement",
                    "src": "3397:3:132"
                  },
                  "nodeType": "ForStatement",
                  "src": "3354:671:132"
                }
              ]
            },
            "baseFunctions": [
              46971
            ],
            "functionSelector": "5b5b815e",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 54129,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 54128,
                  "name": "onlyPoolAdmin",
                  "nameLocations": [
                    "3269:13:132"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 54007,
                  "src": "3269:13:132"
                },
                "nodeType": "ModifierInvocation",
                "src": "3269:13:132"
              }
            ],
            "name": "setBorrowingFlagOnReserve",
            "nameLocation": "3147:25:132",
            "parameters": {
              "id": 54127,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 54124,
                  "mutability": "mutable",
                  "name": "reserveIds",
                  "nameLocation": "3202:10:132",
                  "nodeType": "VariableDeclaration",
                  "scope": 54205,
                  "src": "3183:29:132",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 54122,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "3183:7:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 54123,
                    "nodeType": "ArrayTypeName",
                    "src": "3183:9:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 54126,
                  "mutability": "mutable",
                  "name": "flag",
                  "nameLocation": "3228:4:132",
                  "nodeType": "VariableDeclaration",
                  "scope": 54205,
                  "src": "3223:9:132",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 54125,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3223:4:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3172:67:132"
            },
            "returnParameters": {
              "id": 54130,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3289:0:132"
            },
            "scope": 55222,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 54289,
            "nodeType": "FunctionDefinition",
            "src": "4040:954:132",
            "nodes": [],
            "body": {
              "id": 54288,
              "nodeType": "Block",
              "src": "4203:791:132",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    54217
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 54217,
                      "mutability": "mutable",
                      "name": "cachedPool",
                      "nameLocation": "4227:10:132",
                      "nodeType": "VariableDeclaration",
                      "scope": 54288,
                      "src": "4214:23:132",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ILendingPool_$48084",
                        "typeString": "contract ILendingPool"
                      },
                      "typeName": {
                        "id": 54216,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 54215,
                          "name": "ILendingPool",
                          "nameLocations": [
                            "4214:12:132"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 48084,
                          "src": "4214:12:132"
                        },
                        "referencedDeclaration": 48084,
                        "src": "4214:12:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$48084",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 54220,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 54218,
                      "name": "_getLendingPool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55221,
                      "src": "4240:15:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$48084_$",
                        "typeString": "function () view returns (contract ILendingPool)"
                      }
                    },
                    "id": 54219,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4240:17:132",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPool_$48084",
                      "typeString": "contract ILendingPool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4214:43:132"
                },
                {
                  "body": {
                    "id": 54286,
                    "nodeType": "Block",
                    "src": "4316:671:132",
                    "statements": [
                      {
                        "assignments": [
                          54236
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 54236,
                            "mutability": "mutable",
                            "name": "currentConfig",
                            "nameLocation": "4372:13:132",
                            "nodeType": "VariableDeclaration",
                            "scope": 54286,
                            "src": "4331:54:132",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_memory_ptr",
                              "typeString": "struct DataTypes.ReserveConfigurationMap"
                            },
                            "typeName": {
                              "id": 54235,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 54234,
                                "name": "DataTypes.ReserveConfigurationMap",
                                "nameLocations": [
                                  "4331:9:132",
                                  "4341:23:132"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 64790,
                                "src": "4331:33:132"
                              },
                              "referencedDeclaration": 64790,
                              "src": "4331:33:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_storage_ptr",
                                "typeString": "struct DataTypes.ReserveConfigurationMap"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 54243,
                        "initialValue": {
                          "arguments": [
                            {
                              "baseExpression": {
                                "id": 54239,
                                "name": "reserveIds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54208,
                                "src": "4441:10:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                  "typeString": "uint256[] calldata"
                                }
                              },
                              "id": 54241,
                              "indexExpression": {
                                "id": 54240,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54222,
                                "src": "4452:1:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "4441:13:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 54237,
                              "name": "cachedPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54217,
                              "src": "4388:10:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ILendingPool_$48084",
                                "typeString": "contract ILendingPool"
                              }
                            },
                            "id": 54238,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "4399:23:132",
                            "memberName": "getReserveConfiguration",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 47909,
                            "src": "4388:34:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$",
                              "typeString": "function (uint256) external returns (struct DataTypes.ReserveConfigurationMap memory)"
                            }
                          },
                          "id": 54242,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4388:81:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_memory_ptr",
                            "typeString": "struct DataTypes.ReserveConfigurationMap memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4331:138:132"
                      },
                      {
                        "condition": {
                          "id": 54244,
                          "name": "flag",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 54210,
                          "src": "4488:4:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 54258,
                          "nodeType": "Block",
                          "src": "4586:87:132",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "hexValue": "66616c7365",
                                    "id": 54255,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "bool",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "4651:5:132",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "value": "false"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "expression": {
                                    "id": 54252,
                                    "name": "currentConfig",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 54236,
                                    "src": "4605:13:132",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_memory_ptr",
                                      "typeString": "struct DataTypes.ReserveConfigurationMap memory"
                                    }
                                  },
                                  "id": 54254,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "4619:31:132",
                                  "memberName": "setVariableRateBorrowingEnabled",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 57104,
                                  "src": "4605:45:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$_t_bool_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$",
                                    "typeString": "function (struct DataTypes.ReserveConfigurationMap memory,bool) pure"
                                  }
                                },
                                "id": 54256,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4605:52:132",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 54257,
                              "nodeType": "ExpressionStatement",
                              "src": "4605:52:132"
                            }
                          ]
                        },
                        "id": 54259,
                        "nodeType": "IfStatement",
                        "src": "4484:189:132",
                        "trueBody": {
                          "id": 54251,
                          "nodeType": "Block",
                          "src": "4494:86:132",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "hexValue": "74727565",
                                    "id": 54248,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "bool",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "4559:4:132",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "value": "true"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "expression": {
                                    "id": 54245,
                                    "name": "currentConfig",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 54236,
                                    "src": "4513:13:132",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_memory_ptr",
                                      "typeString": "struct DataTypes.ReserveConfigurationMap memory"
                                    }
                                  },
                                  "id": 54247,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "4527:31:132",
                                  "memberName": "setVariableRateBorrowingEnabled",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 57104,
                                  "src": "4513:45:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$_t_bool_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$",
                                    "typeString": "function (struct DataTypes.ReserveConfigurationMap memory,bool) pure"
                                  }
                                },
                                "id": 54249,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4513:51:132",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 54250,
                              "nodeType": "ExpressionStatement",
                              "src": "4513:51:132"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "baseExpression": {
                                "id": 54263,
                                "name": "reserveIds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54208,
                                "src": "4724:10:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                  "typeString": "uint256[] calldata"
                                }
                              },
                              "id": 54265,
                              "indexExpression": {
                                "id": 54264,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54222,
                                "src": "4735:1:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "4724:13:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "expression": {
                                "id": 54266,
                                "name": "currentConfig",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54236,
                                "src": "4739:13:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_memory_ptr",
                                  "typeString": "struct DataTypes.ReserveConfigurationMap memory"
                                }
                              },
                              "id": 54267,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "4753:4:132",
                              "memberName": "data",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 64789,
                              "src": "4739:18:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 54260,
                              "name": "cachedPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54217,
                              "src": "4689:10:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ILendingPool_$48084",
                                "typeString": "contract ILendingPool"
                              }
                            },
                            "id": 54262,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "4700:23:132",
                            "memberName": "setReserveConfiguration",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 48058,
                            "src": "4689:34:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (uint256,uint256) external"
                            }
                          },
                          "id": 54268,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4689:69:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 54269,
                        "nodeType": "ExpressionStatement",
                        "src": "4689:69:132"
                      },
                      {
                        "condition": {
                          "id": 54270,
                          "name": "flag",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 54210,
                          "src": "4779:4:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 54284,
                          "nodeType": "Block",
                          "src": "4883:93:132",
                          "statements": [
                            {
                              "eventCall": {
                                "arguments": [
                                  {
                                    "baseExpression": {
                                      "id": 54279,
                                      "name": "reserveIds",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 54208,
                                      "src": "4946:10:132",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                        "typeString": "uint256[] calldata"
                                      }
                                    },
                                    "id": 54281,
                                    "indexExpression": {
                                      "id": 54280,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 54222,
                                      "src": "4957:1:132",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "4946:13:132",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 54278,
                                  "name": "VariableRateBorrowingDisabledOnReserve",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 46811,
                                  "src": "4907:38:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256)"
                                  }
                                },
                                "id": 54282,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4907:53:132",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 54283,
                              "nodeType": "EmitStatement",
                              "src": "4902:58:132"
                            }
                          ]
                        },
                        "id": 54285,
                        "nodeType": "IfStatement",
                        "src": "4775:201:132",
                        "trueBody": {
                          "id": 54277,
                          "nodeType": "Block",
                          "src": "4785:92:132",
                          "statements": [
                            {
                              "eventCall": {
                                "arguments": [
                                  {
                                    "baseExpression": {
                                      "id": 54272,
                                      "name": "reserveIds",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 54208,
                                      "src": "4847:10:132",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                        "typeString": "uint256[] calldata"
                                      }
                                    },
                                    "id": 54274,
                                    "indexExpression": {
                                      "id": 54273,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 54222,
                                      "src": "4858:1:132",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "4847:13:132",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 54271,
                                  "name": "VariableRateBorrowingEnabledOnReserve",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 46806,
                                  "src": "4809:37:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256)"
                                  }
                                },
                                "id": 54275,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4809:52:132",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 54276,
                              "nodeType": "EmitStatement",
                              "src": "4804:57:132"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 54228,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 54225,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54222,
                      "src": "4288:1:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 54226,
                        "name": "reserveIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54208,
                        "src": "4292:10:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      "id": 54227,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4303:6:132",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "4292:17:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4288:21:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 54287,
                  "initializationExpression": {
                    "assignments": [
                      54222
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 54222,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "4281:1:132",
                        "nodeType": "VariableDeclaration",
                        "scope": 54287,
                        "src": "4273:9:132",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 54221,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4273:7:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 54224,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 54223,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4285:1:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "4273:13:132"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 54230,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "4311:3:132",
                      "subExpression": {
                        "id": 54229,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54222,
                        "src": "4311:1:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 54231,
                    "nodeType": "ExpressionStatement",
                    "src": "4311:3:132"
                  },
                  "nodeType": "ForStatement",
                  "src": "4268:719:132"
                }
              ]
            },
            "baseFunctions": [
              46979
            ],
            "functionSelector": "bfead1a4",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 54213,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 54212,
                  "name": "onlyPoolAdmin",
                  "nameLocations": [
                    "4183:13:132"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 54007,
                  "src": "4183:13:132"
                },
                "nodeType": "ModifierInvocation",
                "src": "4183:13:132"
              }
            ],
            "name": "setVariableRateBorrowingFlagOnReserve",
            "nameLocation": "4049:37:132",
            "parameters": {
              "id": 54211,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 54208,
                  "mutability": "mutable",
                  "name": "reserveIds",
                  "nameLocation": "4116:10:132",
                  "nodeType": "VariableDeclaration",
                  "scope": 54289,
                  "src": "4097:29:132",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 54206,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "4097:7:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 54207,
                    "nodeType": "ArrayTypeName",
                    "src": "4097:9:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 54210,
                  "mutability": "mutable",
                  "name": "flag",
                  "nameLocation": "4142:4:132",
                  "nodeType": "VariableDeclaration",
                  "scope": 54289,
                  "src": "4137:9:132",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 54209,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4137:4:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4086:67:132"
            },
            "returnParameters": {
              "id": 54214,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4203:0:132"
            },
            "scope": 55222,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 54373,
            "nodeType": "FunctionDefinition",
            "src": "5002:839:132",
            "nodes": [],
            "body": {
              "id": 54372,
              "nodeType": "Block",
              "src": "5150:691:132",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    54301
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 54301,
                      "mutability": "mutable",
                      "name": "cachedPool",
                      "nameLocation": "5174:10:132",
                      "nodeType": "VariableDeclaration",
                      "scope": 54372,
                      "src": "5161:23:132",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ILendingPool_$48084",
                        "typeString": "contract ILendingPool"
                      },
                      "typeName": {
                        "id": 54300,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 54299,
                          "name": "ILendingPool",
                          "nameLocations": [
                            "5161:12:132"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 48084,
                          "src": "5161:12:132"
                        },
                        "referencedDeclaration": 48084,
                        "src": "5161:12:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$48084",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 54304,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 54302,
                      "name": "_getLendingPool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55221,
                      "src": "5187:15:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$48084_$",
                        "typeString": "function () view returns (contract ILendingPool)"
                      }
                    },
                    "id": 54303,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5187:17:132",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPool_$48084",
                      "typeString": "contract ILendingPool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5161:43:132"
                },
                {
                  "body": {
                    "id": 54370,
                    "nodeType": "Block",
                    "src": "5263:571:132",
                    "statements": [
                      {
                        "assignments": [
                          54320
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 54320,
                            "mutability": "mutable",
                            "name": "currentConfig",
                            "nameLocation": "5319:13:132",
                            "nodeType": "VariableDeclaration",
                            "scope": 54370,
                            "src": "5278:54:132",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_memory_ptr",
                              "typeString": "struct DataTypes.ReserveConfigurationMap"
                            },
                            "typeName": {
                              "id": 54319,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 54318,
                                "name": "DataTypes.ReserveConfigurationMap",
                                "nameLocations": [
                                  "5278:9:132",
                                  "5288:23:132"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 64790,
                                "src": "5278:33:132"
                              },
                              "referencedDeclaration": 64790,
                              "src": "5278:33:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_storage_ptr",
                                "typeString": "struct DataTypes.ReserveConfigurationMap"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 54327,
                        "initialValue": {
                          "arguments": [
                            {
                              "baseExpression": {
                                "id": 54323,
                                "name": "reserveIds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54292,
                                "src": "5388:10:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                  "typeString": "uint256[] calldata"
                                }
                              },
                              "id": 54325,
                              "indexExpression": {
                                "id": 54324,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54306,
                                "src": "5399:1:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "5388:13:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 54321,
                              "name": "cachedPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54301,
                              "src": "5335:10:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ILendingPool_$48084",
                                "typeString": "contract ILendingPool"
                              }
                            },
                            "id": 54322,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "5346:23:132",
                            "memberName": "getReserveConfiguration",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 47909,
                            "src": "5335:34:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$",
                              "typeString": "function (uint256) external returns (struct DataTypes.ReserveConfigurationMap memory)"
                            }
                          },
                          "id": 54326,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5335:81:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_memory_ptr",
                            "typeString": "struct DataTypes.ReserveConfigurationMap memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5278:138:132"
                      },
                      {
                        "condition": {
                          "id": 54329,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "5437:5:132",
                          "subExpression": {
                            "id": 54328,
                            "name": "flag",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 54294,
                            "src": "5438:4:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 54337,
                        "nodeType": "IfStatement",
                        "src": "5433:85:132",
                        "trueBody": {
                          "id": 54336,
                          "nodeType": "Block",
                          "src": "5444:74:132",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "baseExpression": {
                                      "id": 54331,
                                      "name": "reserveIds",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 54292,
                                      "src": "5488:10:132",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                        "typeString": "uint256[] calldata"
                                      }
                                    },
                                    "id": 54333,
                                    "indexExpression": {
                                      "id": 54332,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 54306,
                                      "src": "5499:1:132",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "5488:13:132",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 54330,
                                  "name": "_checkReserveNoLiquidity",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 55208,
                                  "src": "5463:24:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256) view"
                                  }
                                },
                                "id": 54334,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5463:39:132",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 54335,
                              "nodeType": "ExpressionStatement",
                              "src": "5463:39:132"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 54341,
                              "name": "flag",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54294,
                              "src": "5556:4:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "expression": {
                              "id": 54338,
                              "name": "currentConfig",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54320,
                              "src": "5532:13:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_memory_ptr",
                                "typeString": "struct DataTypes.ReserveConfigurationMap memory"
                              }
                            },
                            "id": 54340,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "5546:9:132",
                            "memberName": "setActive",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 56954,
                            "src": "5532:23:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$_t_bool_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$",
                              "typeString": "function (struct DataTypes.ReserveConfigurationMap memory,bool) pure"
                            }
                          },
                          "id": 54342,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5532:29:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 54343,
                        "nodeType": "ExpressionStatement",
                        "src": "5532:29:132"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "baseExpression": {
                                "id": 54347,
                                "name": "reserveIds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54292,
                                "src": "5611:10:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                  "typeString": "uint256[] calldata"
                                }
                              },
                              "id": 54349,
                              "indexExpression": {
                                "id": 54348,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54306,
                                "src": "5622:1:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "5611:13:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "expression": {
                                "id": 54350,
                                "name": "currentConfig",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54320,
                                "src": "5626:13:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_memory_ptr",
                                  "typeString": "struct DataTypes.ReserveConfigurationMap memory"
                                }
                              },
                              "id": 54351,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "5640:4:132",
                              "memberName": "data",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 64789,
                              "src": "5626:18:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 54344,
                              "name": "cachedPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54301,
                              "src": "5576:10:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ILendingPool_$48084",
                                "typeString": "contract ILendingPool"
                              }
                            },
                            "id": 54346,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "5587:23:132",
                            "memberName": "setReserveConfiguration",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 48058,
                            "src": "5576:34:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (uint256,uint256) external"
                            }
                          },
                          "id": 54352,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5576:69:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 54353,
                        "nodeType": "ExpressionStatement",
                        "src": "5576:69:132"
                      },
                      {
                        "condition": {
                          "id": 54354,
                          "name": "flag",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 54294,
                          "src": "5666:4:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 54368,
                          "nodeType": "Block",
                          "src": "5750:73:132",
                          "statements": [
                            {
                              "eventCall": {
                                "arguments": [
                                  {
                                    "baseExpression": {
                                      "id": 54363,
                                      "name": "reserveIds",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 54292,
                                      "src": "5793:10:132",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                        "typeString": "uint256[] calldata"
                                      }
                                    },
                                    "id": 54365,
                                    "indexExpression": {
                                      "id": 54364,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 54306,
                                      "src": "5804:1:132",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "5793:13:132",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 54362,
                                  "name": "ReserveDeactivated",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 46821,
                                  "src": "5774:18:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256)"
                                  }
                                },
                                "id": 54366,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5774:33:132",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 54367,
                              "nodeType": "EmitStatement",
                              "src": "5769:38:132"
                            }
                          ]
                        },
                        "id": 54369,
                        "nodeType": "IfStatement",
                        "src": "5662:161:132",
                        "trueBody": {
                          "id": 54361,
                          "nodeType": "Block",
                          "src": "5672:72:132",
                          "statements": [
                            {
                              "eventCall": {
                                "arguments": [
                                  {
                                    "baseExpression": {
                                      "id": 54356,
                                      "name": "reserveIds",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 54292,
                                      "src": "5714:10:132",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                        "typeString": "uint256[] calldata"
                                      }
                                    },
                                    "id": 54358,
                                    "indexExpression": {
                                      "id": 54357,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 54306,
                                      "src": "5725:1:132",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "5714:13:132",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 54355,
                                  "name": "ReserveActivated",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 46816,
                                  "src": "5697:16:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256)"
                                  }
                                },
                                "id": 54359,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5697:31:132",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 54360,
                              "nodeType": "EmitStatement",
                              "src": "5692:36:132"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 54312,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 54309,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54306,
                      "src": "5235:1:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 54310,
                        "name": "reserveIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54292,
                        "src": "5239:10:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      "id": 54311,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5250:6:132",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "5239:17:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5235:21:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 54371,
                  "initializationExpression": {
                    "assignments": [
                      54306
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 54306,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "5228:1:132",
                        "nodeType": "VariableDeclaration",
                        "scope": 54371,
                        "src": "5220:9:132",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 54305,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5220:7:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 54308,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 54307,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5232:1:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "5220:13:132"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 54314,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "5258:3:132",
                      "subExpression": {
                        "id": 54313,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54306,
                        "src": "5258:1:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 54315,
                    "nodeType": "ExpressionStatement",
                    "src": "5258:3:132"
                  },
                  "nodeType": "ForStatement",
                  "src": "5215:619:132"
                }
              ]
            },
            "baseFunctions": [
              46963
            ],
            "functionSelector": "7bb28860",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 54297,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 54296,
                  "name": "onlyPoolAdmin",
                  "nameLocations": [
                    "5130:13:132"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 54007,
                  "src": "5130:13:132"
                },
                "nodeType": "ModifierInvocation",
                "src": "5130:13:132"
              }
            ],
            "name": "setActiveFlagOnReserve",
            "nameLocation": "5011:22:132",
            "parameters": {
              "id": 54295,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 54292,
                  "mutability": "mutable",
                  "name": "reserveIds",
                  "nameLocation": "5063:10:132",
                  "nodeType": "VariableDeclaration",
                  "scope": 54373,
                  "src": "5044:29:132",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 54290,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "5044:7:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 54291,
                    "nodeType": "ArrayTypeName",
                    "src": "5044:9:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 54294,
                  "mutability": "mutable",
                  "name": "flag",
                  "nameLocation": "5089:4:132",
                  "nodeType": "VariableDeclaration",
                  "scope": 54373,
                  "src": "5084:9:132",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 54293,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5084:4:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5033:67:132"
            },
            "returnParameters": {
              "id": 54298,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5150:0:132"
            },
            "scope": 55222,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 54447,
            "nodeType": "FunctionDefinition",
            "src": "5849:734:132",
            "nodes": [],
            "body": {
              "id": 54446,
              "nodeType": "Block",
              "src": "5997:586:132",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    54385
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 54385,
                      "mutability": "mutable",
                      "name": "cachedPool",
                      "nameLocation": "6021:10:132",
                      "nodeType": "VariableDeclaration",
                      "scope": 54446,
                      "src": "6008:23:132",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ILendingPool_$48084",
                        "typeString": "contract ILendingPool"
                      },
                      "typeName": {
                        "id": 54384,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 54383,
                          "name": "ILendingPool",
                          "nameLocations": [
                            "6008:12:132"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 48084,
                          "src": "6008:12:132"
                        },
                        "referencedDeclaration": 48084,
                        "src": "6008:12:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$48084",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 54388,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 54386,
                      "name": "_getLendingPool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55221,
                      "src": "6034:15:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$48084_$",
                        "typeString": "function () view returns (contract ILendingPool)"
                      }
                    },
                    "id": 54387,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6034:17:132",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPool_$48084",
                      "typeString": "contract ILendingPool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6008:43:132"
                },
                {
                  "body": {
                    "id": 54444,
                    "nodeType": "Block",
                    "src": "6110:466:132",
                    "statements": [
                      {
                        "assignments": [
                          54404
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 54404,
                            "mutability": "mutable",
                            "name": "currentConfig",
                            "nameLocation": "6166:13:132",
                            "nodeType": "VariableDeclaration",
                            "scope": 54444,
                            "src": "6125:54:132",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_memory_ptr",
                              "typeString": "struct DataTypes.ReserveConfigurationMap"
                            },
                            "typeName": {
                              "id": 54403,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 54402,
                                "name": "DataTypes.ReserveConfigurationMap",
                                "nameLocations": [
                                  "6125:9:132",
                                  "6135:23:132"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 64790,
                                "src": "6125:33:132"
                              },
                              "referencedDeclaration": 64790,
                              "src": "6125:33:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_storage_ptr",
                                "typeString": "struct DataTypes.ReserveConfigurationMap"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 54411,
                        "initialValue": {
                          "arguments": [
                            {
                              "baseExpression": {
                                "id": 54407,
                                "name": "reserveIds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54376,
                                "src": "6235:10:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                  "typeString": "uint256[] calldata"
                                }
                              },
                              "id": 54409,
                              "indexExpression": {
                                "id": 54408,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54390,
                                "src": "6246:1:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "6235:13:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 54405,
                              "name": "cachedPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54385,
                              "src": "6182:10:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ILendingPool_$48084",
                                "typeString": "contract ILendingPool"
                              }
                            },
                            "id": 54406,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "6193:23:132",
                            "memberName": "getReserveConfiguration",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 47909,
                            "src": "6182:34:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$",
                              "typeString": "function (uint256) external returns (struct DataTypes.ReserveConfigurationMap memory)"
                            }
                          },
                          "id": 54410,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6182:81:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_memory_ptr",
                            "typeString": "struct DataTypes.ReserveConfigurationMap memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6125:138:132"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 54415,
                              "name": "flag",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54378,
                              "src": "6304:4:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "expression": {
                              "id": 54412,
                              "name": "currentConfig",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54404,
                              "src": "6280:13:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_memory_ptr",
                                "typeString": "struct DataTypes.ReserveConfigurationMap memory"
                              }
                            },
                            "id": 54414,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "6294:9:132",
                            "memberName": "setFrozen",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 57004,
                            "src": "6280:23:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$_t_bool_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$",
                              "typeString": "function (struct DataTypes.ReserveConfigurationMap memory,bool) pure"
                            }
                          },
                          "id": 54416,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6280:29:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 54417,
                        "nodeType": "ExpressionStatement",
                        "src": "6280:29:132"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "baseExpression": {
                                "id": 54421,
                                "name": "reserveIds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54376,
                                "src": "6359:10:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                  "typeString": "uint256[] calldata"
                                }
                              },
                              "id": 54423,
                              "indexExpression": {
                                "id": 54422,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54390,
                                "src": "6370:1:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "6359:13:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "expression": {
                                "id": 54424,
                                "name": "currentConfig",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54404,
                                "src": "6374:13:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_memory_ptr",
                                  "typeString": "struct DataTypes.ReserveConfigurationMap memory"
                                }
                              },
                              "id": 54425,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "6388:4:132",
                              "memberName": "data",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 64789,
                              "src": "6374:18:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 54418,
                              "name": "cachedPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54385,
                              "src": "6324:10:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ILendingPool_$48084",
                                "typeString": "contract ILendingPool"
                              }
                            },
                            "id": 54420,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "6335:23:132",
                            "memberName": "setReserveConfiguration",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 48058,
                            "src": "6324:34:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (uint256,uint256) external"
                            }
                          },
                          "id": 54426,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6324:69:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 54427,
                        "nodeType": "ExpressionStatement",
                        "src": "6324:69:132"
                      },
                      {
                        "condition": {
                          "id": 54428,
                          "name": "flag",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 54378,
                          "src": "6414:4:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 54442,
                          "nodeType": "Block",
                          "src": "6495:70:132",
                          "statements": [
                            {
                              "eventCall": {
                                "arguments": [
                                  {
                                    "baseExpression": {
                                      "id": 54437,
                                      "name": "reserveIds",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 54376,
                                      "src": "6535:10:132",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                        "typeString": "uint256[] calldata"
                                      }
                                    },
                                    "id": 54439,
                                    "indexExpression": {
                                      "id": 54438,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 54390,
                                      "src": "6546:1:132",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "6535:13:132",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 54436,
                                  "name": "ReserveUnfrozen",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 46831,
                                  "src": "6519:15:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256)"
                                  }
                                },
                                "id": 54440,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6519:30:132",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 54441,
                              "nodeType": "EmitStatement",
                              "src": "6514:35:132"
                            }
                          ]
                        },
                        "id": 54443,
                        "nodeType": "IfStatement",
                        "src": "6410:155:132",
                        "trueBody": {
                          "id": 54435,
                          "nodeType": "Block",
                          "src": "6420:69:132",
                          "statements": [
                            {
                              "eventCall": {
                                "arguments": [
                                  {
                                    "baseExpression": {
                                      "id": 54430,
                                      "name": "reserveIds",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 54376,
                                      "src": "6459:10:132",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                        "typeString": "uint256[] calldata"
                                      }
                                    },
                                    "id": 54432,
                                    "indexExpression": {
                                      "id": 54431,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 54390,
                                      "src": "6470:1:132",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "6459:13:132",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 54429,
                                  "name": "ReserveFrozen",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 46826,
                                  "src": "6445:13:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256)"
                                  }
                                },
                                "id": 54433,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6445:28:132",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 54434,
                              "nodeType": "EmitStatement",
                              "src": "6440:33:132"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 54396,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 54393,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54390,
                      "src": "6082:1:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 54394,
                        "name": "reserveIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54376,
                        "src": "6086:10:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      "id": 54395,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "6097:6:132",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "6086:17:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6082:21:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 54445,
                  "initializationExpression": {
                    "assignments": [
                      54390
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 54390,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "6075:1:132",
                        "nodeType": "VariableDeclaration",
                        "scope": 54445,
                        "src": "6067:9:132",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 54389,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6067:7:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 54392,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 54391,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6079:1:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "6067:13:132"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 54398,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "6105:3:132",
                      "subExpression": {
                        "id": 54397,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54390,
                        "src": "6105:1:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 54399,
                    "nodeType": "ExpressionStatement",
                    "src": "6105:3:132"
                  },
                  "nodeType": "ForStatement",
                  "src": "6062:514:132"
                }
              ]
            },
            "baseFunctions": [
              46987
            ],
            "functionSelector": "f9e8cafa",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 54381,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 54380,
                  "name": "onlyPoolAdmin",
                  "nameLocations": [
                    "5977:13:132"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 54007,
                  "src": "5977:13:132"
                },
                "nodeType": "ModifierInvocation",
                "src": "5977:13:132"
              }
            ],
            "name": "setFreezeFlagOnReserve",
            "nameLocation": "5858:22:132",
            "parameters": {
              "id": 54379,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 54376,
                  "mutability": "mutable",
                  "name": "reserveIds",
                  "nameLocation": "5910:10:132",
                  "nodeType": "VariableDeclaration",
                  "scope": 54447,
                  "src": "5891:29:132",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 54374,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "5891:7:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 54375,
                    "nodeType": "ArrayTypeName",
                    "src": "5891:9:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 54378,
                  "mutability": "mutable",
                  "name": "flag",
                  "nameLocation": "5936:4:132",
                  "nodeType": "VariableDeclaration",
                  "scope": 54447,
                  "src": "5931:9:132",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 54377,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5931:4:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5880:67:132"
            },
            "returnParameters": {
              "id": 54382,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5997:0:132"
            },
            "scope": 55222,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 54513,
            "nodeType": "FunctionDefinition",
            "src": "6780:659:132",
            "nodes": [],
            "body": {
              "id": 54512,
              "nodeType": "Block",
              "src": "6934:505:132",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    54460
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 54460,
                      "mutability": "mutable",
                      "name": "cachedPool",
                      "nameLocation": "6958:10:132",
                      "nodeType": "VariableDeclaration",
                      "scope": 54512,
                      "src": "6945:23:132",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ILendingPool_$48084",
                        "typeString": "contract ILendingPool"
                      },
                      "typeName": {
                        "id": 54459,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 54458,
                          "name": "ILendingPool",
                          "nameLocations": [
                            "6945:12:132"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 48084,
                          "src": "6945:12:132"
                        },
                        "referencedDeclaration": 48084,
                        "src": "6945:12:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$48084",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 54463,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 54461,
                      "name": "_getLendingPool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55221,
                      "src": "6971:15:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$48084_$",
                        "typeString": "function () view returns (contract ILendingPool)"
                      }
                    },
                    "id": 54462,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6971:17:132",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPool_$48084",
                      "typeString": "contract ILendingPool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6945:43:132"
                },
                {
                  "body": {
                    "id": 54510,
                    "nodeType": "Block",
                    "src": "7047:385:132",
                    "statements": [
                      {
                        "assignments": [
                          54479
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 54479,
                            "mutability": "mutable",
                            "name": "currentConfig",
                            "nameLocation": "7103:13:132",
                            "nodeType": "VariableDeclaration",
                            "scope": 54510,
                            "src": "7062:54:132",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_memory_ptr",
                              "typeString": "struct DataTypes.ReserveConfigurationMap"
                            },
                            "typeName": {
                              "id": 54478,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 54477,
                                "name": "DataTypes.ReserveConfigurationMap",
                                "nameLocations": [
                                  "7062:9:132",
                                  "7072:23:132"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 64790,
                                "src": "7062:33:132"
                              },
                              "referencedDeclaration": 64790,
                              "src": "7062:33:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_storage_ptr",
                                "typeString": "struct DataTypes.ReserveConfigurationMap"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 54486,
                        "initialValue": {
                          "arguments": [
                            {
                              "baseExpression": {
                                "id": 54482,
                                "name": "reserveIds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54451,
                                "src": "7172:10:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                  "typeString": "uint256[] calldata"
                                }
                              },
                              "id": 54484,
                              "indexExpression": {
                                "id": 54483,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54465,
                                "src": "7183:1:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "7172:13:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 54480,
                              "name": "cachedPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54460,
                              "src": "7119:10:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ILendingPool_$48084",
                                "typeString": "contract ILendingPool"
                              }
                            },
                            "id": 54481,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "7130:23:132",
                            "memberName": "getReserveConfiguration",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 47909,
                            "src": "7119:34:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$",
                              "typeString": "function (uint256) external returns (struct DataTypes.ReserveConfigurationMap memory)"
                            }
                          },
                          "id": 54485,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7119:81:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_memory_ptr",
                            "typeString": "struct DataTypes.ReserveConfigurationMap memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7062:138:132"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 54490,
                              "name": "reserveFactor",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54453,
                              "src": "7248:13:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 54487,
                              "name": "currentConfig",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54479,
                              "src": "7217:13:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_memory_ptr",
                                "typeString": "struct DataTypes.ReserveConfigurationMap memory"
                              }
                            },
                            "id": 54489,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "7231:16:132",
                            "memberName": "setReserveFactor",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 57156,
                            "src": "7217:30:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$",
                              "typeString": "function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"
                            }
                          },
                          "id": 54491,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7217:45:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 54492,
                        "nodeType": "ExpressionStatement",
                        "src": "7217:45:132"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "baseExpression": {
                                "id": 54496,
                                "name": "reserveIds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54451,
                                "src": "7314:10:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                  "typeString": "uint256[] calldata"
                                }
                              },
                              "id": 54498,
                              "indexExpression": {
                                "id": 54497,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54465,
                                "src": "7325:1:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "7314:13:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "expression": {
                                "id": 54499,
                                "name": "currentConfig",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54479,
                                "src": "7329:13:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_memory_ptr",
                                  "typeString": "struct DataTypes.ReserveConfigurationMap memory"
                                }
                              },
                              "id": 54500,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "7343:4:132",
                              "memberName": "data",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 64789,
                              "src": "7329:18:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 54493,
                              "name": "cachedPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54460,
                              "src": "7279:10:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ILendingPool_$48084",
                                "typeString": "contract ILendingPool"
                              }
                            },
                            "id": 54495,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "7290:23:132",
                            "memberName": "setReserveConfiguration",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 48058,
                            "src": "7279:34:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (uint256,uint256) external"
                            }
                          },
                          "id": 54501,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7279:69:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 54502,
                        "nodeType": "ExpressionStatement",
                        "src": "7279:69:132"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "baseExpression": {
                                "id": 54504,
                                "name": "reserveIds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54451,
                                "src": "7391:10:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                  "typeString": "uint256[] calldata"
                                }
                              },
                              "id": 54506,
                              "indexExpression": {
                                "id": 54505,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54465,
                                "src": "7402:1:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "7391:13:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 54507,
                              "name": "reserveFactor",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54453,
                              "src": "7406:13:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 54503,
                            "name": "ReserveFactorChanged",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 46838,
                            "src": "7370:20:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (uint256,uint256)"
                            }
                          },
                          "id": 54508,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7370:50:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 54509,
                        "nodeType": "EmitStatement",
                        "src": "7365:55:132"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 54471,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 54468,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54465,
                      "src": "7019:1:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 54469,
                        "name": "reserveIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54451,
                        "src": "7023:10:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      "id": 54470,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "7034:6:132",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "7023:17:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7019:21:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 54511,
                  "initializationExpression": {
                    "assignments": [
                      54465
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 54465,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "7012:1:132",
                        "nodeType": "VariableDeclaration",
                        "scope": 54511,
                        "src": "7004:9:132",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 54464,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7004:7:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 54467,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 54466,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7016:1:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "7004:13:132"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 54473,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "7042:3:132",
                      "subExpression": {
                        "id": 54472,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54465,
                        "src": "7042:1:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 54474,
                    "nodeType": "ExpressionStatement",
                    "src": "7042:3:132"
                  },
                  "nodeType": "ForStatement",
                  "src": "6999:433:132"
                }
              ]
            },
            "baseFunctions": [
              47012
            ],
            "documentation": {
              "id": 54448,
              "nodeType": "StructuredDocumentation",
              "src": "6591:183:132",
              "text": " @dev Updates the reserve factor of a reserve\n @param reserveIds The ids of the reserves\n @param reserveFactor The new reserve factor of the reserve*"
            },
            "functionSelector": "a9c64401",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 54456,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 54455,
                  "name": "onlyPoolAdmin",
                  "nameLocations": [
                    "6914:13:132"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 54007,
                  "src": "6914:13:132"
                },
                "nodeType": "ModifierInvocation",
                "src": "6914:13:132"
              }
            ],
            "name": "setReserveFactor",
            "nameLocation": "6789:16:132",
            "parameters": {
              "id": 54454,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 54451,
                  "mutability": "mutable",
                  "name": "reserveIds",
                  "nameLocation": "6835:10:132",
                  "nodeType": "VariableDeclaration",
                  "scope": 54513,
                  "src": "6816:29:132",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 54449,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "6816:7:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 54450,
                    "nodeType": "ArrayTypeName",
                    "src": "6816:9:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 54453,
                  "mutability": "mutable",
                  "name": "reserveFactor",
                  "nameLocation": "6864:13:132",
                  "nodeType": "VariableDeclaration",
                  "scope": 54513,
                  "src": "6856:21:132",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 54452,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6856:7:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6805:79:132"
            },
            "returnParameters": {
              "id": 54457,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6934:0:132"
            },
            "scope": 55222,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 54560,
            "nodeType": "FunctionDefinition",
            "src": "7651:397:132",
            "nodes": [],
            "body": {
              "id": 54559,
              "nodeType": "Block",
              "src": "7765:283:132",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    54526
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 54526,
                      "mutability": "mutable",
                      "name": "cachedPool",
                      "nameLocation": "7789:10:132",
                      "nodeType": "VariableDeclaration",
                      "scope": 54559,
                      "src": "7776:23:132",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ILendingPool_$48084",
                        "typeString": "contract ILendingPool"
                      },
                      "typeName": {
                        "id": 54525,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 54524,
                          "name": "ILendingPool",
                          "nameLocations": [
                            "7776:12:132"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 48084,
                          "src": "7776:12:132"
                        },
                        "referencedDeclaration": 48084,
                        "src": "7776:12:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$48084",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 54529,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 54527,
                      "name": "_getLendingPool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55221,
                      "src": "7802:15:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$48084_$",
                        "typeString": "function () view returns (contract ILendingPool)"
                      }
                    },
                    "id": 54528,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7802:17:132",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPool_$48084",
                      "typeString": "contract ILendingPool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7776:43:132"
                },
                {
                  "body": {
                    "id": 54557,
                    "nodeType": "Block",
                    "src": "7878:163:132",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "baseExpression": {
                                "id": 54544,
                                "name": "reserveIds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54517,
                                "src": "7930:10:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                  "typeString": "uint256[] calldata"
                                }
                              },
                              "id": 54546,
                              "indexExpression": {
                                "id": 54545,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54531,
                                "src": "7941:1:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "7930:13:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 54547,
                              "name": "rateAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54519,
                              "src": "7945:11:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 54541,
                              "name": "cachedPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54526,
                              "src": "7889:10:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ILendingPool_$48084",
                                "typeString": "contract ILendingPool"
                              }
                            },
                            "id": 54543,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "7900:29:132",
                            "memberName": "setReserveInterestRateAddress",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 48051,
                            "src": "7889:40:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_address_$returns$__$",
                              "typeString": "function (uint256,address) external"
                            }
                          },
                          "id": 54548,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7889:68:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 54549,
                        "nodeType": "ExpressionStatement",
                        "src": "7889:68:132"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "baseExpression": {
                                "id": 54551,
                                "name": "reserveIds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54517,
                                "src": "8002:10:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                  "typeString": "uint256[] calldata"
                                }
                              },
                              "id": 54553,
                              "indexExpression": {
                                "id": 54552,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54531,
                                "src": "8013:1:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "8002:13:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 54554,
                              "name": "rateAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54519,
                              "src": "8017:11:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 54550,
                            "name": "ReserveInterestRateChanged",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 46845,
                            "src": "7975:26:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$returns$__$",
                              "typeString": "function (uint256,address)"
                            }
                          },
                          "id": 54555,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7975:54:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 54556,
                        "nodeType": "EmitStatement",
                        "src": "7970:59:132"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 54537,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 54534,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54531,
                      "src": "7850:1:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 54535,
                        "name": "reserveIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54517,
                        "src": "7854:10:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      "id": 54536,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "7865:6:132",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "7854:17:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7850:21:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 54558,
                  "initializationExpression": {
                    "assignments": [
                      54531
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 54531,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "7843:1:132",
                        "nodeType": "VariableDeclaration",
                        "scope": 54558,
                        "src": "7835:9:132",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 54530,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7835:7:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 54533,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 54532,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7847:1:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "7835:13:132"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 54539,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "7873:3:132",
                      "subExpression": {
                        "id": 54538,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54531,
                        "src": "7873:1:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 54540,
                    "nodeType": "ExpressionStatement",
                    "src": "7873:3:132"
                  },
                  "nodeType": "ForStatement",
                  "src": "7830:211:132"
                }
              ]
            },
            "baseFunctions": [
              47020
            ],
            "documentation": {
              "id": 54514,
              "nodeType": "StructuredDocumentation",
              "src": "7447:198:132",
              "text": " @dev Sets the interest rate strategy of a reserve\n @param reserveIds The ids of the reserves\n @param rateAddress The new address of the interest strategy contract*"
            },
            "functionSelector": "12b4f190",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 54522,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 54521,
                  "name": "onlyPoolAdmin",
                  "nameLocations": [
                    "7751:13:132"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 54007,
                  "src": "7751:13:132"
                },
                "nodeType": "ModifierInvocation",
                "src": "7751:13:132"
              }
            ],
            "name": "setReserveInterestRateAddress",
            "nameLocation": "7660:29:132",
            "parameters": {
              "id": 54520,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 54517,
                  "mutability": "mutable",
                  "name": "reserveIds",
                  "nameLocation": "7709:10:132",
                  "nodeType": "VariableDeclaration",
                  "scope": 54560,
                  "src": "7690:29:132",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 54515,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "7690:7:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 54516,
                    "nodeType": "ArrayTypeName",
                    "src": "7690:9:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 54519,
                  "mutability": "mutable",
                  "name": "rateAddress",
                  "nameLocation": "7729:11:132",
                  "nodeType": "VariableDeclaration",
                  "scope": 54560,
                  "src": "7721:19:132",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 54518,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7721:7:132",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7689:52:132"
            },
            "returnParameters": {
              "id": 54523,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7765:0:132"
            },
            "scope": 55222,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 54731,
            "nodeType": "FunctionDefinition",
            "src": "8056:1998:132",
            "nodes": [],
            "body": {
              "id": 54730,
              "nodeType": "Block",
              "src": "8157:1897:132",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    54571
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 54571,
                      "mutability": "mutable",
                      "name": "cachedPool",
                      "nameLocation": "8181:10:132",
                      "nodeType": "VariableDeclaration",
                      "scope": 54730,
                      "src": "8168:23:132",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ILendingPool_$48084",
                        "typeString": "contract ILendingPool"
                      },
                      "typeName": {
                        "id": 54570,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 54569,
                          "name": "ILendingPool",
                          "nameLocations": [
                            "8168:12:132"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 48084,
                          "src": "8168:12:132"
                        },
                        "referencedDeclaration": 48084,
                        "src": "8168:12:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$48084",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 54574,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 54572,
                      "name": "_getLendingPool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55221,
                      "src": "8194:15:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$48084_$",
                        "typeString": "function () view returns (contract ILendingPool)"
                      }
                    },
                    "id": 54573,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8194:17:132",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPool_$48084",
                      "typeString": "contract ILendingPool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8168:43:132"
                },
                {
                  "body": {
                    "id": 54728,
                    "nodeType": "Block",
                    "src": "8266:1781:132",
                    "statements": [
                      {
                        "assignments": [
                          54590
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 54590,
                            "mutability": "mutable",
                            "name": "currentConfig",
                            "nameLocation": "8322:13:132",
                            "nodeType": "VariableDeclaration",
                            "scope": 54728,
                            "src": "8281:54:132",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_memory_ptr",
                              "typeString": "struct DataTypes.ReserveConfigurationMap"
                            },
                            "typeName": {
                              "id": 54589,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 54588,
                                "name": "DataTypes.ReserveConfigurationMap",
                                "nameLocations": [
                                  "8281:9:132",
                                  "8291:23:132"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 64790,
                                "src": "8281:33:132"
                              },
                              "referencedDeclaration": 64790,
                              "src": "8281:33:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_storage_ptr",
                                "typeString": "struct DataTypes.ReserveConfigurationMap"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 54598,
                        "initialValue": {
                          "arguments": [
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 54593,
                                  "name": "inputs",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 54564,
                                  "src": "8391:6:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_ConfigReserveInput_$64627_calldata_ptr_$dyn_calldata_ptr",
                                    "typeString": "struct ConfigTypes.ConfigReserveInput calldata[] calldata"
                                  }
                                },
                                "id": 54595,
                                "indexExpression": {
                                  "id": 54594,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 54576,
                                  "src": "8398:1:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "8391:9:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ConfigReserveInput_$64627_calldata_ptr",
                                  "typeString": "struct ConfigTypes.ConfigReserveInput calldata"
                                }
                              },
                              "id": 54596,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "8401:9:132",
                              "memberName": "reserveId",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 64608,
                              "src": "8391:19:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 54591,
                              "name": "cachedPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54571,
                              "src": "8338:10:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ILendingPool_$48084",
                                "typeString": "contract ILendingPool"
                              }
                            },
                            "id": 54592,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "8349:23:132",
                            "memberName": "getReserveConfiguration",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 47909,
                            "src": "8338:34:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$",
                              "typeString": "function (uint256) external returns (struct DataTypes.ReserveConfigurationMap memory)"
                            }
                          },
                          "id": 54597,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8338:87:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_memory_ptr",
                            "typeString": "struct DataTypes.ReserveConfigurationMap memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "8281:144:132"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 54608,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 54600,
                                    "name": "inputs",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 54564,
                                    "src": "8666:6:132",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_ConfigReserveInput_$64627_calldata_ptr_$dyn_calldata_ptr",
                                      "typeString": "struct ConfigTypes.ConfigReserveInput calldata[] calldata"
                                    }
                                  },
                                  "id": 54602,
                                  "indexExpression": {
                                    "id": 54601,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 54576,
                                    "src": "8673:1:132",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "8666:9:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_ConfigReserveInput_$64627_calldata_ptr",
                                    "typeString": "struct ConfigTypes.ConfigReserveInput calldata"
                                  }
                                },
                                "id": 54603,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "8676:3:132",
                                "memberName": "ltv",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 64612,
                                "src": "8666:13:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 54604,
                                    "name": "inputs",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 54564,
                                    "src": "8683:6:132",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_struct$_ConfigReserveInput_$64627_calldata_ptr_$dyn_calldata_ptr",
                                      "typeString": "struct ConfigTypes.ConfigReserveInput calldata[] calldata"
                                    }
                                  },
                                  "id": 54606,
                                  "indexExpression": {
                                    "id": 54605,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 54576,
                                    "src": "8690:1:132",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "8683:9:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_ConfigReserveInput_$64627_calldata_ptr",
                                    "typeString": "struct ConfigTypes.ConfigReserveInput calldata"
                                  }
                                },
                                "id": 54607,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "8693:20:132",
                                "memberName": "liquidationThreshold",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 64620,
                                "src": "8683:30:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "8666:47:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "expression": {
                                "id": 54609,
                                "name": "Errors",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 57944,
                                "src": "8715:6:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_Errors_$57944_$",
                                  "typeString": "type(library Errors)"
                                }
                              },
                              "id": 54610,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberLocation": "8722:25:132",
                              "memberName": "LPC_INVALID_CONFIGURATION",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 57817,
                              "src": "8715:32:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 54599,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "8658:7:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 54611,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8658:90:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 54612,
                        "nodeType": "ExpressionStatement",
                        "src": "8658:90:132"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 54618,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "baseExpression": {
                                "id": 54613,
                                "name": "inputs",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54564,
                                "src": "8769:6:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_ConfigReserveInput_$64627_calldata_ptr_$dyn_calldata_ptr",
                                  "typeString": "struct ConfigTypes.ConfigReserveInput calldata[] calldata"
                                }
                              },
                              "id": 54615,
                              "indexExpression": {
                                "id": 54614,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54576,
                                "src": "8776:1:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "8769:9:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ConfigReserveInput_$64627_calldata_ptr",
                                "typeString": "struct ConfigTypes.ConfigReserveInput calldata"
                              }
                            },
                            "id": 54616,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "8779:20:132",
                            "memberName": "liquidationThreshold",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 64620,
                            "src": "8769:30:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 54617,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8803:1:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "8769:35:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 54643,
                          "nodeType": "Block",
                          "src": "9027:109:132",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 54638,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "expression": {
                                        "baseExpression": {
                                          "id": 54633,
                                          "name": "inputs",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 54564,
                                          "src": "9054:6:132",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_struct$_ConfigReserveInput_$64627_calldata_ptr_$dyn_calldata_ptr",
                                            "typeString": "struct ConfigTypes.ConfigReserveInput calldata[] calldata"
                                          }
                                        },
                                        "id": 54635,
                                        "indexExpression": {
                                          "id": 54634,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 54576,
                                          "src": "9061:1:132",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "9054:9:132",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_ConfigReserveInput_$64627_calldata_ptr",
                                          "typeString": "struct ConfigTypes.ConfigReserveInput calldata"
                                        }
                                      },
                                      "id": 54636,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "9064:16:132",
                                      "memberName": "liquidationBonus",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 64618,
                                      "src": "9054:26:132",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "hexValue": "30",
                                      "id": 54637,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "9084:1:132",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "9054:31:132",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "id": 54639,
                                      "name": "Errors",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 57944,
                                      "src": "9087:6:132",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_Errors_$57944_$",
                                        "typeString": "type(library Errors)"
                                      }
                                    },
                                    "id": 54640,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberLocation": "9094:25:132",
                                    "memberName": "LPC_INVALID_CONFIGURATION",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 57817,
                                    "src": "9087:32:132",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 54632,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "9046:7:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 54641,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9046:74:132",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 54642,
                              "nodeType": "ExpressionStatement",
                              "src": "9046:74:132"
                            }
                          ]
                        },
                        "id": 54644,
                        "nodeType": "IfStatement",
                        "src": "8765:371:132",
                        "trueBody": {
                          "id": 54631,
                          "nodeType": "Block",
                          "src": "8806:215:132",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 54626,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "expression": {
                                        "baseExpression": {
                                          "id": 54620,
                                          "name": "inputs",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 54564,
                                          "src": "8908:6:132",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_struct$_ConfigReserveInput_$64627_calldata_ptr_$dyn_calldata_ptr",
                                            "typeString": "struct ConfigTypes.ConfigReserveInput calldata[] calldata"
                                          }
                                        },
                                        "id": 54622,
                                        "indexExpression": {
                                          "id": 54621,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 54576,
                                          "src": "8915:1:132",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "8908:9:132",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_ConfigReserveInput_$64627_calldata_ptr",
                                          "typeString": "struct ConfigTypes.ConfigReserveInput calldata"
                                        }
                                      },
                                      "id": 54623,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "8918:16:132",
                                      "memberName": "liquidationBonus",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 64618,
                                      "src": "8908:26:132",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<=",
                                    "rightExpression": {
                                      "expression": {
                                        "id": 54624,
                                        "name": "PercentageMath",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 64257,
                                        "src": "8938:14:132",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_PercentageMath_$64257_$",
                                          "typeString": "type(library PercentageMath)"
                                        }
                                      },
                                      "id": 54625,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberLocation": "8953:17:132",
                                      "memberName": "PERCENTAGE_FACTOR",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 64140,
                                      "src": "8938:32:132",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "8908:62:132",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "id": 54627,
                                      "name": "Errors",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 57944,
                                      "src": "8972:6:132",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_Errors_$57944_$",
                                        "typeString": "type(library Errors)"
                                      }
                                    },
                                    "id": 54628,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberLocation": "8979:25:132",
                                    "memberName": "LPC_INVALID_CONFIGURATION",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 57817,
                                    "src": "8972:32:132",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 54619,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "8900:7:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 54629,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8900:105:132",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 54630,
                              "nodeType": "ExpressionStatement",
                              "src": "8900:105:132"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 54648,
                                  "name": "inputs",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 54564,
                                  "src": "9214:6:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_ConfigReserveInput_$64627_calldata_ptr_$dyn_calldata_ptr",
                                    "typeString": "struct ConfigTypes.ConfigReserveInput calldata[] calldata"
                                  }
                                },
                                "id": 54650,
                                "indexExpression": {
                                  "id": 54649,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 54576,
                                  "src": "9221:1:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "9214:9:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ConfigReserveInput_$64627_calldata_ptr",
                                  "typeString": "struct ConfigTypes.ConfigReserveInput calldata"
                                }
                              },
                              "id": 54651,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "9224:13:132",
                              "memberName": "reserveFactor",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 64610,
                              "src": "9214:23:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 54645,
                              "name": "currentConfig",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54590,
                              "src": "9183:13:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_memory_ptr",
                                "typeString": "struct DataTypes.ReserveConfigurationMap memory"
                              }
                            },
                            "id": 54647,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "9197:16:132",
                            "memberName": "setReserveFactor",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 57156,
                            "src": "9183:30:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$",
                              "typeString": "function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"
                            }
                          },
                          "id": 54652,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9183:55:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 54653,
                        "nodeType": "ExpressionStatement",
                        "src": "9183:55:132"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 54657,
                                  "name": "inputs",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 54564,
                                  "src": "9310:6:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_ConfigReserveInput_$64627_calldata_ptr_$dyn_calldata_ptr",
                                    "typeString": "struct ConfigTypes.ConfigReserveInput calldata[] calldata"
                                  }
                                },
                                "id": 54659,
                                "indexExpression": {
                                  "id": 54658,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 54576,
                                  "src": "9317:1:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "9310:9:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ConfigReserveInput_$64627_calldata_ptr",
                                  "typeString": "struct ConfigTypes.ConfigReserveInput calldata"
                                }
                              },
                              "id": 54660,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "9320:3:132",
                              "memberName": "ltv",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 64612,
                              "src": "9310:13:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 54654,
                              "name": "currentConfig",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54590,
                              "src": "9289:13:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_memory_ptr",
                                "typeString": "struct DataTypes.ReserveConfigurationMap memory"
                              }
                            },
                            "id": 54656,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "9303:6:132",
                            "memberName": "setLtv",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 56751,
                            "src": "9289:20:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$",
                              "typeString": "function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"
                            }
                          },
                          "id": 54661,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9289:35:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 54662,
                        "nodeType": "ExpressionStatement",
                        "src": "9289:35:132"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 54666,
                                  "name": "inputs",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 54564,
                                  "src": "9396:6:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_ConfigReserveInput_$64627_calldata_ptr_$dyn_calldata_ptr",
                                    "typeString": "struct ConfigTypes.ConfigReserveInput calldata[] calldata"
                                  }
                                },
                                "id": 54668,
                                "indexExpression": {
                                  "id": 54667,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 54576,
                                  "src": "9403:1:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "9396:9:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ConfigReserveInput_$64627_calldata_ptr",
                                  "typeString": "struct ConfigTypes.ConfigReserveInput calldata"
                                }
                              },
                              "id": 54669,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "9406:8:132",
                              "memberName": "decimals",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 64614,
                              "src": "9396:18:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 54663,
                              "name": "currentConfig",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54590,
                              "src": "9370:13:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_memory_ptr",
                                "typeString": "struct DataTypes.ReserveConfigurationMap memory"
                              }
                            },
                            "id": 54665,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "9384:11:132",
                            "memberName": "setDecimals",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 56904,
                            "src": "9370:25:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$",
                              "typeString": "function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"
                            }
                          },
                          "id": 54670,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9370:45:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 54671,
                        "nodeType": "ExpressionStatement",
                        "src": "9370:45:132"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 54675,
                                  "name": "inputs",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 54564,
                                  "src": "9503:6:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_ConfigReserveInput_$64627_calldata_ptr_$dyn_calldata_ptr",
                                    "typeString": "struct ConfigTypes.ConfigReserveInput calldata[] calldata"
                                  }
                                },
                                "id": 54677,
                                "indexExpression": {
                                  "id": 54676,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 54576,
                                  "src": "9510:1:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "9503:9:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ConfigReserveInput_$64627_calldata_ptr",
                                  "typeString": "struct ConfigTypes.ConfigReserveInput calldata"
                                }
                              },
                              "id": 54678,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "9513:11:132",
                              "memberName": "gracePeriod",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 64616,
                              "src": "9503:21:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 54672,
                              "name": "currentConfig",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54590,
                              "src": "9474:13:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_memory_ptr",
                                "typeString": "struct DataTypes.ReserveConfigurationMap memory"
                              }
                            },
                            "id": 54674,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "9488:14:132",
                            "memberName": "setGracePeriod",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 57227,
                            "src": "9474:28:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$",
                              "typeString": "function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"
                            }
                          },
                          "id": 54679,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9474:51:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 54680,
                        "nodeType": "ExpressionStatement",
                        "src": "9474:51:132"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 54684,
                                  "name": "inputs",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 54564,
                                  "src": "9575:6:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_ConfigReserveInput_$64627_calldata_ptr_$dyn_calldata_ptr",
                                    "typeString": "struct ConfigTypes.ConfigReserveInput calldata[] calldata"
                                  }
                                },
                                "id": 54686,
                                "indexExpression": {
                                  "id": 54685,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 54576,
                                  "src": "9582:1:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "9575:9:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ConfigReserveInput_$64627_calldata_ptr",
                                  "typeString": "struct ConfigTypes.ConfigReserveInput calldata"
                                }
                              },
                              "id": 54687,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "9585:16:132",
                              "memberName": "liquidationBonus",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 64618,
                              "src": "9575:26:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 54681,
                              "name": "currentConfig",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54590,
                              "src": "9541:13:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_memory_ptr",
                                "typeString": "struct DataTypes.ReserveConfigurationMap memory"
                              }
                            },
                            "id": 54683,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "9555:19:132",
                            "memberName": "setLiquidationBonus",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 56852,
                            "src": "9541:33:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$",
                              "typeString": "function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"
                            }
                          },
                          "id": 54688,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9541:61:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 54689,
                        "nodeType": "ExpressionStatement",
                        "src": "9541:61:132"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 54693,
                                  "name": "inputs",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 54564,
                                  "src": "9656:6:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_ConfigReserveInput_$64627_calldata_ptr_$dyn_calldata_ptr",
                                    "typeString": "struct ConfigTypes.ConfigReserveInput calldata[] calldata"
                                  }
                                },
                                "id": 54695,
                                "indexExpression": {
                                  "id": 54694,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 54576,
                                  "src": "9663:1:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "9656:9:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ConfigReserveInput_$64627_calldata_ptr",
                                  "typeString": "struct ConfigTypes.ConfigReserveInput calldata"
                                }
                              },
                              "id": 54696,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "9666:20:132",
                              "memberName": "liquidationThreshold",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 64620,
                              "src": "9656:30:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 54690,
                              "name": "currentConfig",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54590,
                              "src": "9618:13:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_memory_ptr",
                                "typeString": "struct DataTypes.ReserveConfigurationMap memory"
                              }
                            },
                            "id": 54692,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "9632:23:132",
                            "memberName": "setLiquidationThreshold",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 56800,
                            "src": "9618:37:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$",
                              "typeString": "function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"
                            }
                          },
                          "id": 54697,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9618:69:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 54698,
                        "nodeType": "ExpressionStatement",
                        "src": "9618:69:132"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 54702,
                                  "name": "inputs",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 54564,
                                  "src": "9768:6:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_ConfigReserveInput_$64627_calldata_ptr_$dyn_calldata_ptr",
                                    "typeString": "struct ConfigTypes.ConfigReserveInput calldata[] calldata"
                                  }
                                },
                                "id": 54704,
                                "indexExpression": {
                                  "id": 54703,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 54576,
                                  "src": "9775:1:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "9768:9:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ConfigReserveInput_$64627_calldata_ptr",
                                  "typeString": "struct ConfigTypes.ConfigReserveInput calldata"
                                }
                              },
                              "id": 54705,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "9778:15:132",
                              "memberName": "auctionDuration",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 64622,
                              "src": "9768:25:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 54699,
                              "name": "currentConfig",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54590,
                              "src": "9735:13:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_memory_ptr",
                                "typeString": "struct DataTypes.ReserveConfigurationMap memory"
                              }
                            },
                            "id": 54701,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "9749:18:132",
                            "memberName": "setAuctionDuration",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 57279,
                            "src": "9735:32:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$",
                              "typeString": "function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"
                            }
                          },
                          "id": 54706,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9735:59:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 54707,
                        "nodeType": "ExpressionStatement",
                        "src": "9735:59:132"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 54711,
                                  "name": "inputs",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 54564,
                                  "src": "9848:6:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_ConfigReserveInput_$64627_calldata_ptr_$dyn_calldata_ptr",
                                    "typeString": "struct ConfigTypes.ConfigReserveInput calldata[] calldata"
                                  }
                                },
                                "id": 54713,
                                "indexExpression": {
                                  "id": 54712,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 54576,
                                  "src": "9855:1:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "9848:9:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ConfigReserveInput_$64627_calldata_ptr",
                                  "typeString": "struct ConfigTypes.ConfigReserveInput calldata"
                                }
                              },
                              "id": 54714,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "9858:20:132",
                              "memberName": "auctionPriceMultiple",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 64624,
                              "src": "9848:30:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 54708,
                              "name": "currentConfig",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54590,
                              "src": "9810:13:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_memory_ptr",
                                "typeString": "struct DataTypes.ReserveConfigurationMap memory"
                              }
                            },
                            "id": 54710,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "9824:23:132",
                            "memberName": "setAuctionPriceMultiple",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 57331,
                            "src": "9810:37:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$",
                              "typeString": "function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"
                            }
                          },
                          "id": 54715,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9810:69:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 54716,
                        "nodeType": "ExpressionStatement",
                        "src": "9810:69:132"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 54720,
                                  "name": "inputs",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 54564,
                                  "src": "9995:6:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_ConfigReserveInput_$64627_calldata_ptr_$dyn_calldata_ptr",
                                    "typeString": "struct ConfigTypes.ConfigReserveInput calldata[] calldata"
                                  }
                                },
                                "id": 54722,
                                "indexExpression": {
                                  "id": 54721,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 54576,
                                  "src": "10002:1:132",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "9995:9:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ConfigReserveInput_$64627_calldata_ptr",
                                  "typeString": "struct ConfigTypes.ConfigReserveInput calldata"
                                }
                              },
                              "id": 54723,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "10005:9:132",
                              "memberName": "reserveId",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 64608,
                              "src": "9995:19:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "expression": {
                                "id": 54724,
                                "name": "currentConfig",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54590,
                                "src": "10016:13:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_memory_ptr",
                                  "typeString": "struct DataTypes.ReserveConfigurationMap memory"
                                }
                              },
                              "id": 54725,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "10030:4:132",
                              "memberName": "data",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 64789,
                              "src": "10016:18:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 54717,
                              "name": "cachedPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54571,
                              "src": "9960:10:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ILendingPool_$48084",
                                "typeString": "contract ILendingPool"
                              }
                            },
                            "id": 54719,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "9971:23:132",
                            "memberName": "setReserveConfiguration",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 48058,
                            "src": "9960:34:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (uint256,uint256) external"
                            }
                          },
                          "id": 54726,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9960:75:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 54727,
                        "nodeType": "ExpressionStatement",
                        "src": "9960:75:132"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 54582,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 54579,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54576,
                      "src": "8242:1:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 54580,
                        "name": "inputs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54564,
                        "src": "8246:6:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_ConfigReserveInput_$64627_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "struct ConfigTypes.ConfigReserveInput calldata[] calldata"
                        }
                      },
                      "id": 54581,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "8253:6:132",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "8246:13:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8242:17:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 54729,
                  "initializationExpression": {
                    "assignments": [
                      54576
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 54576,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "8235:1:132",
                        "nodeType": "VariableDeclaration",
                        "scope": 54729,
                        "src": "8227:9:132",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 54575,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8227:7:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 54578,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 54577,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8239:1:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "8227:13:132"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 54584,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "8261:3:132",
                      "subExpression": {
                        "id": 54583,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54576,
                        "src": "8261:1:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 54585,
                    "nodeType": "ExpressionStatement",
                    "src": "8261:3:132"
                  },
                  "nodeType": "ForStatement",
                  "src": "8222:1825:132"
                }
              ]
            },
            "baseFunctions": [
              47061
            ],
            "functionSelector": "c739fd41",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 54567,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 54566,
                  "name": "onlyPoolAdmin",
                  "nameLocations": [
                    "8143:13:132"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 54007,
                  "src": "8143:13:132"
                },
                "nodeType": "ModifierInvocation",
                "src": "8143:13:132"
              }
            ],
            "name": "batchConfigReserve",
            "nameLocation": "8065:18:132",
            "parameters": {
              "id": 54565,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 54564,
                  "mutability": "mutable",
                  "name": "inputs",
                  "nameLocation": "8126:6:132",
                  "nodeType": "VariableDeclaration",
                  "scope": 54731,
                  "src": "8084:48:132",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_ConfigReserveInput_$64627_calldata_ptr_$dyn_calldata_ptr",
                    "typeString": "struct ConfigTypes.ConfigReserveInput[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 54562,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 54561,
                        "name": "ConfigTypes.ConfigReserveInput",
                        "nameLocations": [
                          "8084:11:132",
                          "8096:18:132"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 64627,
                        "src": "8084:30:132"
                      },
                      "referencedDeclaration": 64627,
                      "src": "8084:30:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ConfigReserveInput_$64627_storage_ptr",
                        "typeString": "struct ConfigTypes.ConfigReserveInput"
                      }
                    },
                    "id": 54563,
                    "nodeType": "ArrayTypeName",
                    "src": "8084:32:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_ConfigReserveInput_$64627_storage_$dyn_storage_ptr",
                      "typeString": "struct ConfigTypes.ConfigReserveInput[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8083:50:132"
            },
            "returnParameters": {
              "id": 54568,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8157:0:132"
            },
            "scope": 55222,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 54815,
            "nodeType": "FunctionDefinition",
            "src": "10404:929:132",
            "nodes": [],
            "body": {
              "id": 54814,
              "nodeType": "Block",
              "src": "10641:692:132",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    54748
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 54748,
                      "mutability": "mutable",
                      "name": "cachedPool",
                      "nameLocation": "10665:10:132",
                      "nodeType": "VariableDeclaration",
                      "scope": 54814,
                      "src": "10652:23:132",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ILendingPool_$48084",
                        "typeString": "contract ILendingPool"
                      },
                      "typeName": {
                        "id": 54747,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 54746,
                          "name": "ILendingPool",
                          "nameLocations": [
                            "10652:12:132"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 48084,
                          "src": "10652:12:132"
                        },
                        "referencedDeclaration": 48084,
                        "src": "10652:12:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$48084",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 54751,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 54749,
                      "name": "_getLendingPool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55221,
                      "src": "10678:15:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$48084_$",
                        "typeString": "function () view returns (contract ILendingPool)"
                      }
                    },
                    "id": 54750,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10678:17:132",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPool_$48084",
                      "typeString": "contract ILendingPool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10652:43:132"
                },
                {
                  "body": {
                    "id": 54812,
                    "nodeType": "Block",
                    "src": "10754:572:132",
                    "statements": [
                      {
                        "assignments": [
                          54767
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 54767,
                            "mutability": "mutable",
                            "name": "currentConfig",
                            "nameLocation": "10810:13:132",
                            "nodeType": "VariableDeclaration",
                            "scope": 54812,
                            "src": "10769:54:132",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_memory_ptr",
                              "typeString": "struct DataTypes.ReserveConfigurationMap"
                            },
                            "typeName": {
                              "id": 54766,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 54765,
                                "name": "DataTypes.ReserveConfigurationMap",
                                "nameLocations": [
                                  "10769:9:132",
                                  "10779:23:132"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 64790,
                                "src": "10769:33:132"
                              },
                              "referencedDeclaration": 64790,
                              "src": "10769:33:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_storage_ptr",
                                "typeString": "struct DataTypes.ReserveConfigurationMap"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 54774,
                        "initialValue": {
                          "arguments": [
                            {
                              "baseExpression": {
                                "id": 54770,
                                "name": "reserveIds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54735,
                                "src": "10879:10:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                  "typeString": "uint256[] calldata"
                                }
                              },
                              "id": 54772,
                              "indexExpression": {
                                "id": 54771,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54753,
                                "src": "10890:1:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "10879:13:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 54768,
                              "name": "cachedPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54748,
                              "src": "10826:10:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ILendingPool_$48084",
                                "typeString": "contract ILendingPool"
                              }
                            },
                            "id": 54769,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "10837:23:132",
                            "memberName": "getReserveConfiguration",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 47909,
                            "src": "10826:34:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$",
                              "typeString": "function (uint256) external returns (struct DataTypes.ReserveConfigurationMap memory)"
                            }
                          },
                          "id": 54773,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10826:81:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_memory_ptr",
                            "typeString": "struct DataTypes.ReserveConfigurationMap memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "10769:138:132"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 54778,
                              "name": "liquidationBonus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54737,
                              "src": "10958:16:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 54775,
                              "name": "currentConfig",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54767,
                              "src": "10924:13:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_memory_ptr",
                                "typeString": "struct DataTypes.ReserveConfigurationMap memory"
                              }
                            },
                            "id": 54777,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "10938:19:132",
                            "memberName": "setLiquidationBonus",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 56852,
                            "src": "10924:33:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$",
                              "typeString": "function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"
                            }
                          },
                          "id": 54779,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10924:51:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 54780,
                        "nodeType": "ExpressionStatement",
                        "src": "10924:51:132"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 54784,
                              "name": "auctionDuration",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54739,
                              "src": "11023:15:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 54781,
                              "name": "currentConfig",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54767,
                              "src": "10990:13:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_memory_ptr",
                                "typeString": "struct DataTypes.ReserveConfigurationMap memory"
                              }
                            },
                            "id": 54783,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "11004:18:132",
                            "memberName": "setAuctionDuration",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 57279,
                            "src": "10990:32:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$",
                              "typeString": "function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"
                            }
                          },
                          "id": 54785,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10990:49:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 54786,
                        "nodeType": "ExpressionStatement",
                        "src": "10990:49:132"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 54790,
                              "name": "auctionPriceMultiple",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54741,
                              "src": "11092:20:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 54787,
                              "name": "currentConfig",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54767,
                              "src": "11054:13:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_memory_ptr",
                                "typeString": "struct DataTypes.ReserveConfigurationMap memory"
                              }
                            },
                            "id": 54789,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "11068:23:132",
                            "memberName": "setAuctionPriceMultiple",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 57331,
                            "src": "11054:37:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$64790_memory_ptr_$",
                              "typeString": "function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"
                            }
                          },
                          "id": 54791,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11054:59:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 54792,
                        "nodeType": "ExpressionStatement",
                        "src": "11054:59:132"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "baseExpression": {
                                "id": 54796,
                                "name": "reserveIds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54735,
                                "src": "11165:10:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                  "typeString": "uint256[] calldata"
                                }
                              },
                              "id": 54798,
                              "indexExpression": {
                                "id": 54797,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54753,
                                "src": "11176:1:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "11165:13:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "expression": {
                                "id": 54799,
                                "name": "currentConfig",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54767,
                                "src": "11180:13:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ReserveConfigurationMap_$64790_memory_ptr",
                                  "typeString": "struct DataTypes.ReserveConfigurationMap memory"
                                }
                              },
                              "id": 54800,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "11194:4:132",
                              "memberName": "data",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 64789,
                              "src": "11180:18:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 54793,
                              "name": "cachedPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54748,
                              "src": "11130:10:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ILendingPool_$48084",
                                "typeString": "contract ILendingPool"
                              }
                            },
                            "id": 54795,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "11141:23:132",
                            "memberName": "setReserveConfiguration",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 48058,
                            "src": "11130:34:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (uint256,uint256) external"
                            }
                          },
                          "id": 54801,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11130:69:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 54802,
                        "nodeType": "ExpressionStatement",
                        "src": "11130:69:132"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "baseExpression": {
                                "id": 54804,
                                "name": "reserveIds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54735,
                                "src": "11243:10:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                  "typeString": "uint256[] calldata"
                                }
                              },
                              "id": 54806,
                              "indexExpression": {
                                "id": 54805,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54753,
                                "src": "11254:1:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "11243:13:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 54807,
                              "name": "liquidationBonus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54737,
                              "src": "11258:16:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 54808,
                              "name": "auctionDuration",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54739,
                              "src": "11276:15:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 54809,
                              "name": "auctionPriceMultiple",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54741,
                              "src": "11293:20:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 54803,
                            "name": "ReserveAuctionChanged",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 46867,
                            "src": "11221:21:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (uint256,uint256,uint256,uint256)"
                            }
                          },
                          "id": 54810,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11221:93:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 54811,
                        "nodeType": "EmitStatement",
                        "src": "11216:98:132"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 54759,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 54756,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54753,
                      "src": "10726:1:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 54757,
                        "name": "reserveIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54735,
                        "src": "10730:10:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      "id": 54758,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "10741:6:132",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "10730:17:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10726:21:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 54813,
                  "initializationExpression": {
                    "assignments": [
                      54753
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 54753,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "10719:1:132",
                        "nodeType": "VariableDeclaration",
                        "scope": 54813,
                        "src": "10711:9:132",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 54752,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10711:7:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 54755,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 54754,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10723:1:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "10711:13:132"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 54761,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "10749:3:132",
                      "subExpression": {
                        "id": 54760,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54753,
                        "src": "10749:1:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 54762,
                    "nodeType": "ExpressionStatement",
                    "src": "10749:3:132"
                  },
                  "nodeType": "ForStatement",
                  "src": "10706:620:132"
                }
              ]
            },
            "baseFunctions": [
              47054
            ],
            "documentation": {
              "id": 54732,
              "nodeType": "StructuredDocumentation",
              "src": "10062:336:132",
              "text": " @dev Configures the Reserve auction parameters\n @param reserveIds Reserve ids\n @param liquidationBonus The bonus received by the protocol on liquidating this asset.\n @param auctionDuration The duration of the auction\n @param auctionPriceMultiple The dutch auction start price multiplier*"
            },
            "functionSelector": "d9db75ee",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 54744,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 54743,
                  "name": "onlyPoolAdmin",
                  "nameLocations": [
                    "10621:13:132"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 54007,
                  "src": "10621:13:132"
                },
                "nodeType": "ModifierInvocation",
                "src": "10621:13:132"
              }
            ],
            "name": "configureReserveAuction",
            "nameLocation": "10413:23:132",
            "parameters": {
              "id": 54742,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 54735,
                  "mutability": "mutable",
                  "name": "reserveIds",
                  "nameLocation": "10466:10:132",
                  "nodeType": "VariableDeclaration",
                  "scope": 54815,
                  "src": "10447:29:132",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 54733,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "10447:7:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 54734,
                    "nodeType": "ArrayTypeName",
                    "src": "10447:9:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 54737,
                  "mutability": "mutable",
                  "name": "liquidationBonus",
                  "nameLocation": "10495:16:132",
                  "nodeType": "VariableDeclaration",
                  "scope": 54815,
                  "src": "10487:24:132",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 54736,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10487:7:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 54739,
                  "mutability": "mutable",
                  "name": "auctionDuration",
                  "nameLocation": "10530:15:132",
                  "nodeType": "VariableDeclaration",
                  "scope": 54815,
                  "src": "10522:23:132",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 54738,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10522:7:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 54741,
                  "mutability": "mutable",
                  "name": "auctionPriceMultiple",
                  "nameLocation": "10564:20:132",
                  "nodeType": "VariableDeclaration",
                  "scope": 54815,
                  "src": "10556:28:132",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 54740,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10556:7:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10436:155:132"
            },
            "returnParameters": {
              "id": 54745,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10641:0:132"
            },
            "scope": 55222,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 54861,
            "nodeType": "FunctionDefinition",
            "src": "11341:427:132",
            "nodes": [],
            "body": {
              "id": 54860,
              "nodeType": "Block",
              "src": "11494:274:132",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    54827
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 54827,
                      "mutability": "mutable",
                      "name": "cachedPool",
                      "nameLocation": "11518:10:132",
                      "nodeType": "VariableDeclaration",
                      "scope": 54860,
                      "src": "11505:23:132",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ILendingPool_$48084",
                        "typeString": "contract ILendingPool"
                      },
                      "typeName": {
                        "id": 54826,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 54825,
                          "name": "ILendingPool",
                          "nameLocations": [
                            "11505:12:132"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 48084,
                          "src": "11505:12:132"
                        },
                        "referencedDeclaration": 48084,
                        "src": "11505:12:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$48084",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 54830,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 54828,
                      "name": "_getLendingPool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55221,
                      "src": "11531:15:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$48084_$",
                        "typeString": "function () view returns (contract ILendingPool)"
                      }
                    },
                    "id": 54829,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11531:17:132",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPool_$48084",
                      "typeString": "contract ILendingPool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11505:43:132"
                },
                {
                  "body": {
                    "id": 54858,
                    "nodeType": "Block",
                    "src": "11607:154:132",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "baseExpression": {
                                "id": 54845,
                                "name": "reserveIds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54818,
                                "src": "11653:10:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                  "typeString": "uint256[] calldata"
                                }
                              },
                              "id": 54847,
                              "indexExpression": {
                                "id": 54846,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54832,
                                "src": "11664:1:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "11653:13:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 54848,
                              "name": "maxSupply",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54820,
                              "src": "11668:9:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 54842,
                              "name": "cachedPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54827,
                              "src": "11622:10:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ILendingPool_$48084",
                                "typeString": "contract ILendingPool"
                              }
                            },
                            "id": 54844,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "11633:19:132",
                            "memberName": "setReserveMaxSupply",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 48044,
                            "src": "11622:30:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (uint256,uint256) external"
                            }
                          },
                          "id": 54849,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11622:56:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 54850,
                        "nodeType": "ExpressionStatement",
                        "src": "11622:56:132"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "baseExpression": {
                                "id": 54852,
                                "name": "reserveIds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54818,
                                "src": "11724:10:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                  "typeString": "uint256[] calldata"
                                }
                              },
                              "id": 54854,
                              "indexExpression": {
                                "id": 54853,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54832,
                                "src": "11735:1:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "11724:13:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 54855,
                              "name": "maxSupply",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 54820,
                              "src": "11739:9:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 54851,
                            "name": "ReserveMaxSupplyChanged",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 46881,
                            "src": "11700:23:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (uint256,uint256)"
                            }
                          },
                          "id": 54856,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11700:49:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 54857,
                        "nodeType": "EmitStatement",
                        "src": "11695:54:132"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 54838,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 54835,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 54832,
                      "src": "11579:1:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 54836,
                        "name": "reserveIds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54818,
                        "src": "11583:10:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      "id": 54837,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "11594:6:132",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "11583:17:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11579:21:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 54859,
                  "initializationExpression": {
                    "assignments": [
                      54832
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 54832,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "11572:1:132",
                        "nodeType": "VariableDeclaration",
                        "scope": 54859,
                        "src": "11564:9:132",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 54831,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11564:7:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 54834,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 54833,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "11576:1:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "11564:13:132"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 54840,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "11602:3:132",
                      "subExpression": {
                        "id": 54839,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54832,
                        "src": "11602:1:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 54841,
                    "nodeType": "ExpressionStatement",
                    "src": "11602:3:132"
                  },
                  "nodeType": "ForStatement",
                  "src": "11559:202:132"
                }
              ]
            },
            "baseFunctions": [
              47042
            ],
            "functionSelector": "2d72e18e",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 54823,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 54822,
                  "name": "onlyPoolAdmin",
                  "nameLocations": [
                    "11474:13:132"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 54007,
                  "src": "11474:13:132"
                },
                "nodeType": "ModifierInvocation",
                "src": "11474:13:132"
              }
            ],
            "name": "setReserveMaxSupply",
            "nameLocation": "11350:19:132",
            "parameters": {
              "id": 54821,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 54818,
                  "mutability": "mutable",
                  "name": "reserveIds",
                  "nameLocation": "11399:10:132",
                  "nodeType": "VariableDeclaration",
                  "scope": 54861,
                  "src": "11380:29:132",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 54816,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "11380:7:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 54817,
                    "nodeType": "ArrayTypeName",
                    "src": "11380:9:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 54820,
                  "mutability": "mutable",
                  "name": "maxSupply",
                  "nameLocation": "11428:9:132",
                  "nodeType": "VariableDeclaration",
                  "scope": 54861,
                  "src": "11420:17:132",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 54819,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11420:7:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11369:75:132"
            },
            "returnParameters": {
              "id": 54824,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11494:0:132"
            },
            "scope": 55222,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 54885,
            "nodeType": "FunctionDefinition",
            "src": "11912:221:132",
            "nodes": [],
            "body": {
              "id": 54884,
              "nodeType": "Block",
              "src": "12005:128:132",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    54873
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 54873,
                      "mutability": "mutable",
                      "name": "cachedPool",
                      "nameLocation": "12029:10:132",
                      "nodeType": "VariableDeclaration",
                      "scope": 54884,
                      "src": "12016:23:132",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ILendingPool_$48084",
                        "typeString": "contract ILendingPool"
                      },
                      "typeName": {
                        "id": 54872,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 54871,
                          "name": "ILendingPool",
                          "nameLocations": [
                            "12016:12:132"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 48084,
                          "src": "12016:12:132"
                        },
                        "referencedDeclaration": 48084,
                        "src": "12016:12:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$48084",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 54876,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 54874,
                      "name": "_getLendingPool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55221,
                      "src": "12042:15:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$48084_$",
                        "typeString": "function () view returns (contract ILendingPool)"
                      }
                    },
                    "id": 54875,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12042:17:132",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPool_$48084",
                      "typeString": "contract ILendingPool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12016:43:132"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 54880,
                        "name": "reserveId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54864,
                        "src": "12106:9:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 54881,
                        "name": "creator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54866,
                        "src": "12117:7:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 54877,
                        "name": "cachedPool",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54873,
                        "src": "12070:10:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$48084",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "id": 54879,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "12081:24:132",
                      "memberName": "setReserveCreatorAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 48065,
                      "src": "12070:35:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (uint256,address) external"
                      }
                    },
                    "id": 54882,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12070:55:132",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 54883,
                  "nodeType": "ExpressionStatement",
                  "src": "12070:55:132"
                }
              ]
            },
            "baseFunctions": [
              47027
            ],
            "documentation": {
              "id": 54862,
              "nodeType": "StructuredDocumentation",
              "src": "11776:130:132",
              "text": " @dev Updates the reserve creator address within the fToken contract via the lendingPool (proxy admin)"
            },
            "functionSelector": "bbce5cf3",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 54869,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 54868,
                  "name": "onlyPoolAdmin",
                  "nameLocations": [
                    "11991:13:132"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 54007,
                  "src": "11991:13:132"
                },
                "nodeType": "ModifierInvocation",
                "src": "11991:13:132"
              }
            ],
            "name": "setReserveCreatorAddress",
            "nameLocation": "11921:24:132",
            "parameters": {
              "id": 54867,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 54864,
                  "mutability": "mutable",
                  "name": "reserveId",
                  "nameLocation": "11954:9:132",
                  "nodeType": "VariableDeclaration",
                  "scope": 54885,
                  "src": "11946:17:132",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 54863,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11946:7:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 54866,
                  "mutability": "mutable",
                  "name": "creator",
                  "nameLocation": "11973:7:132",
                  "nodeType": "VariableDeclaration",
                  "scope": 54885,
                  "src": "11965:15:132",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 54865,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11965:7:132",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11945:36:132"
            },
            "returnParameters": {
              "id": 54870,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12005:0:132"
            },
            "scope": 55222,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 54909,
            "nodeType": "FunctionDefinition",
            "src": "12280:233:132",
            "nodes": [],
            "body": {
              "id": 54908,
              "nodeType": "Block",
              "src": "12379:134:132",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    54897
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 54897,
                      "mutability": "mutable",
                      "name": "cachedPool",
                      "nameLocation": "12403:10:132",
                      "nodeType": "VariableDeclaration",
                      "scope": 54908,
                      "src": "12390:23:132",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ILendingPool_$48084",
                        "typeString": "contract ILendingPool"
                      },
                      "typeName": {
                        "id": 54896,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 54895,
                          "name": "ILendingPool",
                          "nameLocations": [
                            "12390:12:132"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 48084,
                          "src": "12390:12:132"
                        },
                        "referencedDeclaration": 48084,
                        "src": "12390:12:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$48084",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 54900,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 54898,
                      "name": "_getLendingPool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55221,
                      "src": "12416:15:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$48084_$",
                        "typeString": "function () view returns (contract ILendingPool)"
                      }
                    },
                    "id": 54899,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12416:17:132",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPool_$48084",
                      "typeString": "contract ILendingPool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12390:43:132"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 54904,
                        "name": "reserveId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54888,
                        "src": "12483:9:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 54905,
                        "name": "percentage",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54890,
                        "src": "12494:10:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 54901,
                        "name": "cachedPool",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54897,
                        "src": "12444:10:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$48084",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "id": 54903,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "12455:27:132",
                      "memberName": "setReserveCreatorPercentage",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 48072,
                      "src": "12444:38:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256) external"
                      }
                    },
                    "id": 54906,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12444:61:132",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 54907,
                  "nodeType": "ExpressionStatement",
                  "src": "12444:61:132"
                }
              ]
            },
            "baseFunctions": [
              47034
            ],
            "documentation": {
              "id": 54886,
              "nodeType": "StructuredDocumentation",
              "src": "12141:133:132",
              "text": " @dev Updates the reserve creator percentage within the fToken contract via the lendingPool (proxy admin)"
            },
            "functionSelector": "e49c8a52",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 54893,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 54892,
                  "name": "onlyPoolAdmin",
                  "nameLocations": [
                    "12365:13:132"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 54007,
                  "src": "12365:13:132"
                },
                "nodeType": "ModifierInvocation",
                "src": "12365:13:132"
              }
            ],
            "name": "setReserveCreatorPercentage",
            "nameLocation": "12289:27:132",
            "parameters": {
              "id": 54891,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 54888,
                  "mutability": "mutable",
                  "name": "reserveId",
                  "nameLocation": "12325:9:132",
                  "nodeType": "VariableDeclaration",
                  "scope": 54909,
                  "src": "12317:17:132",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 54887,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12317:7:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 54890,
                  "mutability": "mutable",
                  "name": "percentage",
                  "nameLocation": "12344:10:132",
                  "nodeType": "VariableDeclaration",
                  "scope": 54909,
                  "src": "12336:18:132",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 54889,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12336:7:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12316:39:132"
            },
            "returnParameters": {
              "id": 54894,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12379:0:132"
            },
            "scope": 55222,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 54947,
            "nodeType": "FunctionDefinition",
            "src": "12521:401:132",
            "nodes": [],
            "body": {
              "id": 54946,
              "nodeType": "Block",
              "src": "12592:330:132",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    54918
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 54918,
                      "mutability": "mutable",
                      "name": "cachedPool",
                      "nameLocation": "12616:10:132",
                      "nodeType": "VariableDeclaration",
                      "scope": 54946,
                      "src": "12603:23:132",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ILendingPool_$48084",
                        "typeString": "contract ILendingPool"
                      },
                      "typeName": {
                        "id": 54917,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 54916,
                          "name": "ILendingPool",
                          "nameLocations": [
                            "12603:12:132"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 48084,
                          "src": "12603:12:132"
                        },
                        "referencedDeclaration": 48084,
                        "src": "12603:12:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$48084",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 54921,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 54919,
                      "name": "_getLendingPool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55221,
                      "src": "12629:15:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$48084_$",
                        "typeString": "function () view returns (contract ILendingPool)"
                      }
                    },
                    "id": 54920,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12629:17:132",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPool_$48084",
                      "typeString": "contract ILendingPool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12603:43:132"
                },
                {
                  "assignments": [
                    54923
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 54923,
                      "mutability": "mutable",
                      "name": "curVal",
                      "nameLocation": "12697:6:132",
                      "nodeType": "VariableDeclaration",
                      "scope": 54946,
                      "src": "12689:14:132",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 54922,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12689:7:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 54927,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 54924,
                        "name": "cachedPool",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54918,
                        "src": "12706:10:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$48084",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "id": 54925,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "12717:22:132",
                      "memberName": "getMaxNumberOfReserves",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 48037,
                      "src": "12706:33:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                        "typeString": "function () view external returns (uint256)"
                      }
                    },
                    "id": 54926,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12706:35:132",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12689:52:132"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 54931,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 54929,
                          "name": "newVal",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 54911,
                          "src": "12760:6:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "id": 54930,
                          "name": "curVal",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 54923,
                          "src": "12769:6:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "12760:15:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "expression": {
                          "id": 54932,
                          "name": "Errors",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 57944,
                          "src": "12777:6:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Errors_$57944_$",
                            "typeString": "type(library Errors)"
                          }
                        },
                        "id": 54933,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "12784:25:132",
                        "memberName": "LPC_INVALID_CONFIGURATION",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 57817,
                        "src": "12777:32:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 54928,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "12752:7:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 54934,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12752:58:132",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 54935,
                  "nodeType": "ExpressionStatement",
                  "src": "12752:58:132"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 54939,
                        "name": "newVal",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54911,
                        "src": "12855:6:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 54936,
                        "name": "cachedPool",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54918,
                        "src": "12821:10:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$48084",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "id": 54938,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "12832:22:132",
                      "memberName": "setMaxNumberOfReserves",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 48032,
                      "src": "12821:33:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256) external"
                      }
                    },
                    "id": 54940,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12821:41:132",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 54941,
                  "nodeType": "ExpressionStatement",
                  "src": "12821:41:132"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 54943,
                        "name": "newVal",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54911,
                        "src": "12907:6:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 54942,
                      "name": "MaxNumberOfReservesChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 46886,
                      "src": "12880:26:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 54944,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12880:34:132",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 54945,
                  "nodeType": "EmitStatement",
                  "src": "12875:39:132"
                }
              ]
            },
            "baseFunctions": [
              47004
            ],
            "functionSelector": "746c35a2",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 54914,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 54913,
                  "name": "onlyPoolAdmin",
                  "nameLocations": [
                    "12578:13:132"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 54007,
                  "src": "12578:13:132"
                },
                "nodeType": "ModifierInvocation",
                "src": "12578:13:132"
              }
            ],
            "name": "setMaxNumberOfReserves",
            "nameLocation": "12530:22:132",
            "parameters": {
              "id": 54912,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 54911,
                  "mutability": "mutable",
                  "name": "newVal",
                  "nameLocation": "12561:6:132",
                  "nodeType": "VariableDeclaration",
                  "scope": 54947,
                  "src": "12553:14:132",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 54910,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12553:7:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12552:16:132"
            },
            "returnParameters": {
              "id": 54915,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12592:0:132"
            },
            "scope": 55222,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 54968,
            "nodeType": "FunctionDefinition",
            "src": "13113:157:132",
            "nodes": [],
            "body": {
              "id": 54967,
              "nodeType": "Block",
              "src": "13173:97:132",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    54957
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 54957,
                      "mutability": "mutable",
                      "name": "cachedPool",
                      "nameLocation": "13197:10:132",
                      "nodeType": "VariableDeclaration",
                      "scope": 54967,
                      "src": "13184:23:132",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ILendingPool_$48084",
                        "typeString": "contract ILendingPool"
                      },
                      "typeName": {
                        "id": 54956,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 54955,
                          "name": "ILendingPool",
                          "nameLocations": [
                            "13184:12:132"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 48084,
                          "src": "13184:12:132"
                        },
                        "referencedDeclaration": 48084,
                        "src": "13184:12:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$48084",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 54960,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 54958,
                      "name": "_getLendingPool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55221,
                      "src": "13210:15:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$48084_$",
                        "typeString": "function () view returns (contract ILendingPool)"
                      }
                    },
                    "id": 54959,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13210:17:132",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPool_$48084",
                      "typeString": "contract ILendingPool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13184:43:132"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 54964,
                        "name": "val",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54950,
                        "src": "13258:3:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "expression": {
                        "id": 54961,
                        "name": "cachedPool",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54957,
                        "src": "13238:10:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$48084",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "id": 54963,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "13249:8:132",
                      "memberName": "setPause",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 47940,
                      "src": "13238:19:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bool_$returns$__$",
                        "typeString": "function (bool) external"
                      }
                    },
                    "id": 54965,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13238:24:132",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 54966,
                  "nodeType": "ExpressionStatement",
                  "src": "13238:24:132"
                }
              ]
            },
            "baseFunctions": [
              46992
            ],
            "documentation": {
              "id": 54948,
              "nodeType": "StructuredDocumentation",
              "src": "12930:177:132",
              "text": " @dev pauses or unpauses all the actions of the protocol, including fToken transfers\n @param val true if protocol needs to be paused, false otherwise*"
            },
            "functionSelector": "7641f3d9",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 54953,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 54952,
                  "name": "onlyEmergencyAdmin",
                  "nameLocations": [
                    "13154:18:132"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 54022,
                  "src": "13154:18:132"
                },
                "nodeType": "ModifierInvocation",
                "src": "13154:18:132"
              }
            ],
            "name": "setPoolPause",
            "nameLocation": "13122:12:132",
            "parameters": {
              "id": 54951,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 54950,
                  "mutability": "mutable",
                  "name": "val",
                  "nameLocation": "13140:3:132",
                  "nodeType": "VariableDeclaration",
                  "scope": 54968,
                  "src": "13135:8:132",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 54949,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "13135:4:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13134:10:132"
            },
            "returnParameters": {
              "id": 54954,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13173:0:132"
            },
            "scope": 55222,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 54991,
            "nodeType": "FunctionDefinition",
            "src": "13278:218:132",
            "nodes": [],
            "body": {
              "id": 54990,
              "nodeType": "Block",
              "src": "13374:122:132",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    54979
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 54979,
                      "mutability": "mutable",
                      "name": "cachedPool",
                      "nameLocation": "13398:10:132",
                      "nodeType": "VariableDeclaration",
                      "scope": 54990,
                      "src": "13385:23:132",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ILendingPool_$48084",
                        "typeString": "contract ILendingPool"
                      },
                      "typeName": {
                        "id": 54978,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 54977,
                          "name": "ILendingPool",
                          "nameLocations": [
                            "13385:12:132"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 48084,
                          "src": "13385:12:132"
                        },
                        "referencedDeclaration": 48084,
                        "src": "13385:12:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$48084",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 54982,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 54980,
                      "name": "_getLendingPool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55221,
                      "src": "13411:15:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$48084_$",
                        "typeString": "function () view returns (contract ILendingPool)"
                      }
                    },
                    "id": 54981,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13411:17:132",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPool_$48084",
                      "typeString": "contract ILendingPool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13385:43:132"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 54986,
                        "name": "startTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54970,
                        "src": "13464:9:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 54987,
                        "name": "durationTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54972,
                        "src": "13475:12:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 54983,
                        "name": "cachedPool",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54979,
                        "src": "13439:10:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$48084",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "id": 54985,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "13450:13:132",
                      "memberName": "setPausedTime",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 47947,
                      "src": "13439:24:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256) external"
                      }
                    },
                    "id": 54988,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13439:49:132",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 54989,
                  "nodeType": "ExpressionStatement",
                  "src": "13439:49:132"
                }
              ]
            },
            "baseFunctions": [
              46999
            ],
            "functionSelector": "84636d4f",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 54975,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 54974,
                  "name": "onlyEmergencyAdmin",
                  "nameLocations": [
                    "13355:18:132"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 54022,
                  "src": "13355:18:132"
                },
                "nodeType": "ModifierInvocation",
                "src": "13355:18:132"
              }
            ],
            "name": "setPoolPausedTime",
            "nameLocation": "13287:17:132",
            "parameters": {
              "id": 54973,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 54970,
                  "mutability": "mutable",
                  "name": "startTime",
                  "nameLocation": "13313:9:132",
                  "nodeType": "VariableDeclaration",
                  "scope": 54991,
                  "src": "13305:17:132",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 54969,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13305:7:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 54972,
                  "mutability": "mutable",
                  "name": "durationTime",
                  "nameLocation": "13332:12:132",
                  "nodeType": "VariableDeclaration",
                  "scope": 54991,
                  "src": "13324:20:132",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 54971,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13324:7:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13304:41:132"
            },
            "returnParameters": {
              "id": 54976,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13374:0:132"
            },
            "scope": 55222,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 55030,
            "nodeType": "FunctionDefinition",
            "src": "13586:299:132",
            "nodes": [],
            "body": {
              "id": 55029,
              "nodeType": "Block",
              "src": "13680:205:132",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    55003
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 55003,
                      "mutability": "mutable",
                      "name": "cachedPool",
                      "nameLocation": "13704:10:132",
                      "nodeType": "VariableDeclaration",
                      "scope": 55029,
                      "src": "13691:23:132",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ILendingPool_$48084",
                        "typeString": "contract ILendingPool"
                      },
                      "typeName": {
                        "id": 55002,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 55001,
                          "name": "ILendingPool",
                          "nameLocations": [
                            "13691:12:132"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 48084,
                          "src": "13691:12:132"
                        },
                        "referencedDeclaration": 48084,
                        "src": "13691:12:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$48084",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 55006,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 55004,
                      "name": "_getLendingPool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55221,
                      "src": "13717:15:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$48084_$",
                        "typeString": "function () view returns (contract ILendingPool)"
                      }
                    },
                    "id": 55005,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13717:17:132",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPool_$48084",
                      "typeString": "contract ILendingPool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13691:43:132"
                },
                {
                  "body": {
                    "id": 55027,
                    "nodeType": "Block",
                    "src": "13791:87:132",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 55021,
                              "name": "cachedPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 55003,
                              "src": "13844:10:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ILendingPool_$48084",
                                "typeString": "contract ILendingPool"
                              }
                            },
                            {
                              "baseExpression": {
                                "id": 55022,
                                "name": "inputs",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 54996,
                                "src": "13856:6:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_UpdateFTokenInput_$64681_calldata_ptr_$dyn_calldata_ptr",
                                  "typeString": "struct ConfigTypes.UpdateFTokenInput calldata[] calldata"
                                }
                              },
                              "id": 55024,
                              "indexExpression": {
                                "id": 55023,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 55008,
                                "src": "13863:1:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "13856:9:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_UpdateFTokenInput_$64681_calldata_ptr",
                                "typeString": "struct ConfigTypes.UpdateFTokenInput calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_ILendingPool_$48084",
                                "typeString": "contract ILendingPool"
                              },
                              {
                                "typeIdentifier": "t_struct$_UpdateFTokenInput_$64681_calldata_ptr",
                                "typeString": "struct ConfigTypes.UpdateFTokenInput calldata"
                              }
                            ],
                            "expression": {
                              "id": 55018,
                              "name": "ConfiguratorLogic",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 59960,
                              "src": "13806:17:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ConfiguratorLogic_$59960_$",
                                "typeString": "type(library ConfiguratorLogic)"
                              }
                            },
                            "id": 55020,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "13824:19:132",
                            "memberName": "executeUpdateFToken",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 59687,
                            "src": "13806:37:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_delegatecall_nonpayable$_t_contract$_ILendingPool_$48084_$_t_struct$_UpdateFTokenInput_$64681_memory_ptr_$returns$__$",
                              "typeString": "function (contract ILendingPool,struct ConfigTypes.UpdateFTokenInput memory)"
                            }
                          },
                          "id": 55025,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13806:60:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 55026,
                        "nodeType": "ExpressionStatement",
                        "src": "13806:60:132"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 55014,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 55011,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55008,
                      "src": "13767:1:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 55012,
                        "name": "inputs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 54996,
                        "src": "13771:6:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_UpdateFTokenInput_$64681_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "struct ConfigTypes.UpdateFTokenInput calldata[] calldata"
                        }
                      },
                      "id": 55013,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "13778:6:132",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "13771:13:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13767:17:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 55028,
                  "initializationExpression": {
                    "assignments": [
                      55008
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 55008,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "13760:1:132",
                        "nodeType": "VariableDeclaration",
                        "scope": 55028,
                        "src": "13752:9:132",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 55007,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13752:7:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 55010,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 55009,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "13764:1:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "13752:13:132"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 55016,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "13786:3:132",
                      "subExpression": {
                        "id": 55015,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55008,
                        "src": "13786:1:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 55017,
                    "nodeType": "ExpressionStatement",
                    "src": "13786:3:132"
                  },
                  "nodeType": "ForStatement",
                  "src": "13747:131:132"
                }
              ]
            },
            "baseFunctions": [
              47068
            ],
            "documentation": {
              "id": 54992,
              "nodeType": "StructuredDocumentation",
              "src": "13504:76:132",
              "text": " @dev Updates the fToken implementation for the reserve*"
            },
            "functionSelector": "3c8db8b1",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 54999,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 54998,
                  "name": "onlyPoolAdmin",
                  "nameLocations": [
                    "13666:13:132"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 54007,
                  "src": "13666:13:132"
                },
                "nodeType": "ModifierInvocation",
                "src": "13666:13:132"
              }
            ],
            "name": "updateFToken",
            "nameLocation": "13595:12:132",
            "parameters": {
              "id": 54997,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 54996,
                  "mutability": "mutable",
                  "name": "inputs",
                  "nameLocation": "13649:6:132",
                  "nodeType": "VariableDeclaration",
                  "scope": 55030,
                  "src": "13608:47:132",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_UpdateFTokenInput_$64681_calldata_ptr_$dyn_calldata_ptr",
                    "typeString": "struct ConfigTypes.UpdateFTokenInput[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 54994,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 54993,
                        "name": "ConfigTypes.UpdateFTokenInput",
                        "nameLocations": [
                          "13608:11:132",
                          "13620:17:132"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 64681,
                        "src": "13608:29:132"
                      },
                      "referencedDeclaration": 64681,
                      "src": "13608:29:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_UpdateFTokenInput_$64681_storage_ptr",
                        "typeString": "struct ConfigTypes.UpdateFTokenInput"
                      }
                    },
                    "id": 54995,
                    "nodeType": "ArrayTypeName",
                    "src": "13608:31:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_UpdateFTokenInput_$64681_storage_$dyn_storage_ptr",
                      "typeString": "struct ConfigTypes.UpdateFTokenInput[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13607:49:132"
            },
            "returnParameters": {
              "id": 55000,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13680:0:132"
            },
            "scope": 55222,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 55069,
            "nodeType": "FunctionDefinition",
            "src": "13986:320:132",
            "nodes": [],
            "body": {
              "id": 55068,
              "nodeType": "Block",
              "src": "14092:214:132",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    55042
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 55042,
                      "mutability": "mutable",
                      "name": "cachedPool",
                      "nameLocation": "14116:10:132",
                      "nodeType": "VariableDeclaration",
                      "scope": 55068,
                      "src": "14103:23:132",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ILendingPool_$48084",
                        "typeString": "contract ILendingPool"
                      },
                      "typeName": {
                        "id": 55041,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 55040,
                          "name": "ILendingPool",
                          "nameLocations": [
                            "14103:12:132"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 48084,
                          "src": "14103:12:132"
                        },
                        "referencedDeclaration": 48084,
                        "src": "14103:12:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$48084",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 55045,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 55043,
                      "name": "_getLendingPool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55221,
                      "src": "14129:15:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$48084_$",
                        "typeString": "function () view returns (contract ILendingPool)"
                      }
                    },
                    "id": 55044,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14129:17:132",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPool_$48084",
                      "typeString": "contract ILendingPool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14103:43:132"
                },
                {
                  "body": {
                    "id": 55066,
                    "nodeType": "Block",
                    "src": "14203:96:132",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 55060,
                              "name": "cachedPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 55042,
                              "src": "14265:10:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ILendingPool_$48084",
                                "typeString": "contract ILendingPool"
                              }
                            },
                            {
                              "baseExpression": {
                                "id": 55061,
                                "name": "inputs",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 55035,
                                "src": "14277:6:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_UpdateDebtTokenInput_$64692_calldata_ptr_$dyn_calldata_ptr",
                                  "typeString": "struct ConfigTypes.UpdateDebtTokenInput calldata[] calldata"
                                }
                              },
                              "id": 55063,
                              "indexExpression": {
                                "id": 55062,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 55047,
                                "src": "14284:1:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "14277:9:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_UpdateDebtTokenInput_$64692_calldata_ptr",
                                "typeString": "struct ConfigTypes.UpdateDebtTokenInput calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_ILendingPool_$48084",
                                "typeString": "contract ILendingPool"
                              },
                              {
                                "typeIdentifier": "t_struct$_UpdateDebtTokenInput_$64692_calldata_ptr",
                                "typeString": "struct ConfigTypes.UpdateDebtTokenInput calldata"
                              }
                            ],
                            "expression": {
                              "id": 55057,
                              "name": "ConfiguratorLogic",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 59960,
                              "src": "14218:17:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ConfiguratorLogic_$59960_$",
                                "typeString": "type(library ConfiguratorLogic)"
                              }
                            },
                            "id": 55059,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "14236:28:132",
                            "memberName": "executeUpdateStableDebtToken",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 59730,
                            "src": "14218:46:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_delegatecall_nonpayable$_t_contract$_ILendingPool_$48084_$_t_struct$_UpdateDebtTokenInput_$64692_memory_ptr_$returns$__$",
                              "typeString": "function (contract ILendingPool,struct ConfigTypes.UpdateDebtTokenInput memory)"
                            }
                          },
                          "id": 55064,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14218:69:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 55065,
                        "nodeType": "ExpressionStatement",
                        "src": "14218:69:132"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 55053,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 55050,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55047,
                      "src": "14179:1:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 55051,
                        "name": "inputs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55035,
                        "src": "14183:6:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_UpdateDebtTokenInput_$64692_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "struct ConfigTypes.UpdateDebtTokenInput calldata[] calldata"
                        }
                      },
                      "id": 55052,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "14190:6:132",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "14183:13:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14179:17:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 55067,
                  "initializationExpression": {
                    "assignments": [
                      55047
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 55047,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "14172:1:132",
                        "nodeType": "VariableDeclaration",
                        "scope": 55067,
                        "src": "14164:9:132",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 55046,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14164:7:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 55049,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 55048,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14176:1:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "14164:13:132"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 55055,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "14198:3:132",
                      "subExpression": {
                        "id": 55054,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55047,
                        "src": "14198:1:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 55056,
                    "nodeType": "ExpressionStatement",
                    "src": "14198:3:132"
                  },
                  "nodeType": "ForStatement",
                  "src": "14159:140:132"
                }
              ]
            },
            "baseFunctions": [
              47075
            ],
            "documentation": {
              "id": 55031,
              "nodeType": "StructuredDocumentation",
              "src": "13893:87:132",
              "text": " @dev Updates the stable debt token implementation for the reserve*"
            },
            "functionSelector": "29534299",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 55038,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 55037,
                  "name": "onlyPoolAdmin",
                  "nameLocations": [
                    "14078:13:132"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 54007,
                  "src": "14078:13:132"
                },
                "nodeType": "ModifierInvocation",
                "src": "14078:13:132"
              }
            ],
            "name": "updateStableDebtToken",
            "nameLocation": "13995:21:132",
            "parameters": {
              "id": 55036,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 55035,
                  "mutability": "mutable",
                  "name": "inputs",
                  "nameLocation": "14061:6:132",
                  "nodeType": "VariableDeclaration",
                  "scope": 55069,
                  "src": "14017:50:132",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_UpdateDebtTokenInput_$64692_calldata_ptr_$dyn_calldata_ptr",
                    "typeString": "struct ConfigTypes.UpdateDebtTokenInput[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 55033,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 55032,
                        "name": "ConfigTypes.UpdateDebtTokenInput",
                        "nameLocations": [
                          "14017:11:132",
                          "14029:20:132"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 64692,
                        "src": "14017:32:132"
                      },
                      "referencedDeclaration": 64692,
                      "src": "14017:32:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_UpdateDebtTokenInput_$64692_storage_ptr",
                        "typeString": "struct ConfigTypes.UpdateDebtTokenInput"
                      }
                    },
                    "id": 55034,
                    "nodeType": "ArrayTypeName",
                    "src": "14017:34:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_UpdateDebtTokenInput_$64692_storage_$dyn_storage_ptr",
                      "typeString": "struct ConfigTypes.UpdateDebtTokenInput[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14016:52:132"
            },
            "returnParameters": {
              "id": 55039,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14092:0:132"
            },
            "scope": 55222,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 55108,
            "nodeType": "FunctionDefinition",
            "src": "14400:324:132",
            "nodes": [],
            "body": {
              "id": 55107,
              "nodeType": "Block",
              "src": "14508:216:132",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    55081
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 55081,
                      "mutability": "mutable",
                      "name": "cachedPool",
                      "nameLocation": "14532:10:132",
                      "nodeType": "VariableDeclaration",
                      "scope": 55107,
                      "src": "14519:23:132",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ILendingPool_$48084",
                        "typeString": "contract ILendingPool"
                      },
                      "typeName": {
                        "id": 55080,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 55079,
                          "name": "ILendingPool",
                          "nameLocations": [
                            "14519:12:132"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 48084,
                          "src": "14519:12:132"
                        },
                        "referencedDeclaration": 48084,
                        "src": "14519:12:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$48084",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 55084,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 55082,
                      "name": "_getLendingPool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55221,
                      "src": "14545:15:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$48084_$",
                        "typeString": "function () view returns (contract ILendingPool)"
                      }
                    },
                    "id": 55083,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14545:17:132",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPool_$48084",
                      "typeString": "contract ILendingPool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14519:43:132"
                },
                {
                  "body": {
                    "id": 55105,
                    "nodeType": "Block",
                    "src": "14619:98:132",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 55099,
                              "name": "cachedPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 55081,
                              "src": "14683:10:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ILendingPool_$48084",
                                "typeString": "contract ILendingPool"
                              }
                            },
                            {
                              "baseExpression": {
                                "id": 55100,
                                "name": "inputs",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 55074,
                                "src": "14695:6:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_UpdateDebtTokenInput_$64692_calldata_ptr_$dyn_calldata_ptr",
                                  "typeString": "struct ConfigTypes.UpdateDebtTokenInput calldata[] calldata"
                                }
                              },
                              "id": 55102,
                              "indexExpression": {
                                "id": 55101,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 55086,
                                "src": "14702:1:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "14695:9:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_UpdateDebtTokenInput_$64692_calldata_ptr",
                                "typeString": "struct ConfigTypes.UpdateDebtTokenInput calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_ILendingPool_$48084",
                                "typeString": "contract ILendingPool"
                              },
                              {
                                "typeIdentifier": "t_struct$_UpdateDebtTokenInput_$64692_calldata_ptr",
                                "typeString": "struct ConfigTypes.UpdateDebtTokenInput calldata"
                              }
                            ],
                            "expression": {
                              "id": 55096,
                              "name": "ConfiguratorLogic",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 59960,
                              "src": "14634:17:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ConfiguratorLogic_$59960_$",
                                "typeString": "type(library ConfiguratorLogic)"
                              }
                            },
                            "id": 55098,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "14652:30:132",
                            "memberName": "executeUpdateVariableDebtToken",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 59773,
                            "src": "14634:48:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_delegatecall_nonpayable$_t_contract$_ILendingPool_$48084_$_t_struct$_UpdateDebtTokenInput_$64692_memory_ptr_$returns$__$",
                              "typeString": "function (contract ILendingPool,struct ConfigTypes.UpdateDebtTokenInput memory)"
                            }
                          },
                          "id": 55103,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14634:71:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 55104,
                        "nodeType": "ExpressionStatement",
                        "src": "14634:71:132"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 55092,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 55089,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55086,
                      "src": "14595:1:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 55090,
                        "name": "inputs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55074,
                        "src": "14599:6:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_UpdateDebtTokenInput_$64692_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "struct ConfigTypes.UpdateDebtTokenInput calldata[] calldata"
                        }
                      },
                      "id": 55091,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "14606:6:132",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "14599:13:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14595:17:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 55106,
                  "initializationExpression": {
                    "assignments": [
                      55086
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 55086,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "14588:1:132",
                        "nodeType": "VariableDeclaration",
                        "scope": 55106,
                        "src": "14580:9:132",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 55085,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14580:7:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 55088,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 55087,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14592:1:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "14580:13:132"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 55094,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "14614:3:132",
                      "subExpression": {
                        "id": 55093,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55086,
                        "src": "14614:1:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 55095,
                    "nodeType": "ExpressionStatement",
                    "src": "14614:3:132"
                  },
                  "nodeType": "ForStatement",
                  "src": "14575:142:132"
                }
              ]
            },
            "baseFunctions": [
              47082
            ],
            "documentation": {
              "id": 55070,
              "nodeType": "StructuredDocumentation",
              "src": "14314:80:132",
              "text": " @dev Updates the debt token implementation for the reserve*"
            },
            "functionSelector": "ceaedb9b",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 55077,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 55076,
                  "name": "onlyPoolAdmin",
                  "nameLocations": [
                    "14494:13:132"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 54007,
                  "src": "14494:13:132"
                },
                "nodeType": "ModifierInvocation",
                "src": "14494:13:132"
              }
            ],
            "name": "updateVariableDebtToken",
            "nameLocation": "14409:23:132",
            "parameters": {
              "id": 55075,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 55074,
                  "mutability": "mutable",
                  "name": "inputs",
                  "nameLocation": "14477:6:132",
                  "nodeType": "VariableDeclaration",
                  "scope": 55108,
                  "src": "14433:50:132",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_UpdateDebtTokenInput_$64692_calldata_ptr_$dyn_calldata_ptr",
                    "typeString": "struct ConfigTypes.UpdateDebtTokenInput[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 55072,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 55071,
                        "name": "ConfigTypes.UpdateDebtTokenInput",
                        "nameLocations": [
                          "14433:11:132",
                          "14445:20:132"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 64692,
                        "src": "14433:32:132"
                      },
                      "referencedDeclaration": 64692,
                      "src": "14433:32:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_UpdateDebtTokenInput_$64692_storage_ptr",
                        "typeString": "struct ConfigTypes.UpdateDebtTokenInput"
                      }
                    },
                    "id": 55073,
                    "nodeType": "ArrayTypeName",
                    "src": "14433:34:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_UpdateDebtTokenInput_$64692_storage_$dyn_storage_ptr",
                      "typeString": "struct ConfigTypes.UpdateDebtTokenInput[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14432:52:132"
            },
            "returnParameters": {
              "id": 55078,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14508:0:132"
            },
            "scope": 55222,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 55147,
            "nodeType": "FunctionDefinition",
            "src": "14732:355:132",
            "nodes": [],
            "body": {
              "id": 55146,
              "nodeType": "Block",
              "src": "14828:259:132",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    55118
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 55118,
                      "mutability": "mutable",
                      "name": "executionDelegate",
                      "nameLocation": "14858:17:132",
                      "nodeType": "VariableDeclaration",
                      "scope": 55146,
                      "src": "14839:36:132",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IExecutionDelegate_$47185",
                        "typeString": "contract IExecutionDelegate"
                      },
                      "typeName": {
                        "id": 55117,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 55116,
                          "name": "IExecutionDelegate",
                          "nameLocations": [
                            "14839:18:132"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 47185,
                          "src": "14839:18:132"
                        },
                        "referencedDeclaration": 47185,
                        "src": "14839:18:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IExecutionDelegate_$47185",
                          "typeString": "contract IExecutionDelegate"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 55124,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 55120,
                            "name": "_addressProvider",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 53978,
                            "src": "14897:16:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAddressProvider_$46447",
                              "typeString": "contract IAddressProvider"
                            }
                          },
                          "id": 55121,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "14914:20:132",
                          "memberName": "getExecutionDelegate",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 46186,
                          "src": "14897:37:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                            "typeString": "function () view external returns (address)"
                          }
                        },
                        "id": 55122,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14897:39:132",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 55119,
                      "name": "IExecutionDelegate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 47185,
                      "src": "14878:18:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IExecutionDelegate_$47185_$",
                        "typeString": "type(contract IExecutionDelegate)"
                      }
                    },
                    "id": 55123,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14878:59:132",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IExecutionDelegate_$47185",
                      "typeString": "contract IExecutionDelegate"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14839:98:132"
                },
                {
                  "body": {
                    "id": 55144,
                    "nodeType": "Block",
                    "src": "15005:74:132",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "baseExpression": {
                                "id": 55139,
                                "name": "contracts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 55111,
                                "src": "15054:9:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                }
                              },
                              "id": 55141,
                              "indexExpression": {
                                "id": 55140,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 55126,
                                "src": "15064:1:132",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "15054:12:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 55136,
                              "name": "executionDelegate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 55118,
                              "src": "15020:17:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IExecutionDelegate_$47185",
                                "typeString": "contract IExecutionDelegate"
                              }
                            },
                            "id": 55138,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "15038:15:132",
                            "memberName": "approveContract",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 47127,
                            "src": "15020:33:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address) external"
                            }
                          },
                          "id": 55142,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15020:47:132",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 55143,
                        "nodeType": "ExpressionStatement",
                        "src": "15020:47:132"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 55132,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 55129,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 55126,
                      "src": "14978:1:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 55130,
                        "name": "contracts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55111,
                        "src": "14982:9:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      "id": 55131,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "14992:6:132",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "14982:16:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14978:20:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 55145,
                  "initializationExpression": {
                    "assignments": [
                      55126
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 55126,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "14971:1:132",
                        "nodeType": "VariableDeclaration",
                        "scope": 55145,
                        "src": "14963:9:132",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 55125,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14963:7:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 55128,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 55127,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14975:1:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "14963:13:132"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 55134,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "15000:3:132",
                      "subExpression": {
                        "id": 55133,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55126,
                        "src": "15000:1:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 55135,
                    "nodeType": "ExpressionStatement",
                    "src": "15000:3:132"
                  },
                  "nodeType": "ForStatement",
                  "src": "14958:121:132"
                }
              ]
            },
            "baseFunctions": [
              47088
            ],
            "functionSelector": "80a4d93d",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 55114,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 55113,
                  "name": "onlyPoolAdmin",
                  "nameLocations": [
                    "14814:13:132"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 54007,
                  "src": "14814:13:132"
                },
                "nodeType": "ModifierInvocation",
                "src": "14814:13:132"
              }
            ],
            "name": "approveExecutionDelegateContracts",
            "nameLocation": "14741:33:132",
            "parameters": {
              "id": 55112,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 55111,
                  "mutability": "mutable",
                  "name": "contracts",
                  "nameLocation": "14794:9:132",
                  "nodeType": "VariableDeclaration",
                  "scope": 55147,
                  "src": "14775:28:132",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 55109,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "14775:7:132",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 55110,
                    "nodeType": "ArrayTypeName",
                    "src": "14775:9:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14774:30:132"
            },
            "returnParameters": {
              "id": 55115,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14828:0:132"
            },
            "scope": 55222,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 55167,
            "nodeType": "FunctionDefinition",
            "src": "15095:207:132",
            "nodes": [],
            "body": {
              "id": 55166,
              "nodeType": "Block",
              "src": "15158:144:132",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    55154
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 55154,
                      "mutability": "mutable",
                      "name": "wethGateway",
                      "nameLocation": "15182:11:132",
                      "nodeType": "VariableDeclaration",
                      "scope": 55166,
                      "src": "15169:24:132",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IWETHGateway_$48998",
                        "typeString": "contract IWETHGateway"
                      },
                      "typeName": {
                        "id": 55153,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 55152,
                          "name": "IWETHGateway",
                          "nameLocations": [
                            "15169:12:132"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 48998,
                          "src": "15169:12:132"
                        },
                        "referencedDeclaration": 48998,
                        "src": "15169:12:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IWETHGateway_$48998",
                          "typeString": "contract IWETHGateway"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 55160,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 55156,
                            "name": "_addressProvider",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 53978,
                            "src": "15209:16:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAddressProvider_$46447",
                              "typeString": "contract IAddressProvider"
                            }
                          },
                          "id": 55157,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "15226:14:132",
                          "memberName": "getWETHGateway",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 46441,
                          "src": "15209:31:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                            "typeString": "function () view external returns (address)"
                          }
                        },
                        "id": 55158,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15209:33:132",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 55155,
                      "name": "IWETHGateway",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 48998,
                      "src": "15196:12:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IWETHGateway_$48998_$",
                        "typeString": "type(contract IWETHGateway)"
                      }
                    },
                    "id": 55159,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15196:47:132",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IWETHGateway_$48998",
                      "typeString": "contract IWETHGateway"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15169:74:132"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 55161,
                        "name": "wethGateway",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55154,
                        "src": "15254:11:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IWETHGateway_$48998",
                          "typeString": "contract IWETHGateway"
                        }
                      },
                      "id": 55163,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "15266:26:132",
                      "memberName": "authorizeExecutionDelegate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 48997,
                      "src": "15254:38:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$__$",
                        "typeString": "function () external"
                      }
                    },
                    "id": 55164,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15254:40:132",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 55165,
                  "nodeType": "ExpressionStatement",
                  "src": "15254:40:132"
                }
              ]
            },
            "functionSelector": "0e342789",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 55150,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 55149,
                  "name": "onlyPoolAdmin",
                  "nameLocations": [
                    "15144:13:132"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 54007,
                  "src": "15144:13:132"
                },
                "nodeType": "ModifierInvocation",
                "src": "15144:13:132"
              }
            ],
            "name": "approveWETHExecutionDelegate",
            "nameLocation": "15104:28:132",
            "parameters": {
              "id": 55148,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15132:2:132"
            },
            "returnParameters": {
              "id": 55151,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15158:0:132"
            },
            "scope": 55222,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 55208,
            "nodeType": "FunctionDefinition",
            "src": "15310:383:132",
            "nodes": [],
            "body": {
              "id": 55207,
              "nodeType": "Block",
              "src": "15377:316:132",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    55176
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 55176,
                      "mutability": "mutable",
                      "name": "reserve",
                      "nameLocation": "15413:7:132",
                      "nodeType": "VariableDeclaration",
                      "scope": 55207,
                      "src": "15388:32:132",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Reserve_$64757_memory_ptr",
                        "typeString": "struct DataTypes.Reserve"
                      },
                      "typeName": {
                        "id": 55175,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 55174,
                          "name": "DataTypes.Reserve",
                          "nameLocations": [
                            "15388:9:132",
                            "15398:7:132"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 64757,
                          "src": "15388:17:132"
                        },
                        "referencedDeclaration": 64757,
                        "src": "15388:17:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Reserve_$64757_storage_ptr",
                          "typeString": "struct DataTypes.Reserve"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 55182,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 55180,
                        "name": "reserveId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55169,
                        "src": "15452:9:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 55177,
                          "name": "_getLendingPool",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 55221,
                          "src": "15423:15:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$48084_$",
                            "typeString": "function () view returns (contract ILendingPool)"
                          }
                        },
                        "id": 55178,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15423:17:132",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$48084",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "id": 55179,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "15441:10:132",
                      "memberName": "getReserve",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 47996,
                      "src": "15423:28:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_struct$_Reserve_$64757_memory_ptr_$",
                        "typeString": "function (uint256) view external returns (struct DataTypes.Reserve memory)"
                      }
                    },
                    "id": 55181,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15423:39:132",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Reserve_$64757_memory_ptr",
                      "typeString": "struct DataTypes.Reserve memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15388:74:132"
                },
                {
                  "assignments": [
                    55184
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 55184,
                      "mutability": "mutable",
                      "name": "availableLiquidity",
                      "nameLocation": "15483:18:132",
                      "nodeType": "VariableDeclaration",
                      "scope": 55207,
                      "src": "15475:26:132",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 55183,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "15475:7:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 55193,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 55190,
                          "name": "reserve",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 55176,
                          "src": "15547:7:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Reserve_$64757_memory_ptr",
                            "typeString": "struct DataTypes.Reserve memory"
                          }
                        },
                        "id": 55191,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "15555:13:132",
                        "memberName": "fTokenAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 64730,
                        "src": "15547:21:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "expression": {
                              "id": 55186,
                              "name": "reserve",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 55176,
                              "src": "15522:7:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Reserve_$64757_memory_ptr",
                                "typeString": "struct DataTypes.Reserve memory"
                              }
                            },
                            "id": 55187,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "15530:5:132",
                            "memberName": "asset",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 64728,
                            "src": "15522:13:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 55185,
                          "name": "IERC20Upgradeable",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27189,
                          "src": "15504:17:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC20Upgradeable_$27189_$",
                            "typeString": "type(contract IERC20Upgradeable)"
                          }
                        },
                        "id": 55188,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15504:32:132",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Upgradeable_$27189",
                          "typeString": "contract IERC20Upgradeable"
                        }
                      },
                      "id": 55189,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "15537:9:132",
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27146,
                      "src": "15504:42:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 55192,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15504:65:132",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15475:94:132"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 55202,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 55197,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 55195,
                            "name": "availableLiquidity",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 55184,
                            "src": "15590:18:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 55196,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "15612:1:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "15590:23:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          },
                          "id": 55201,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 55198,
                              "name": "reserve",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 55176,
                              "src": "15617:7:132",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Reserve_$64757_memory_ptr",
                                "typeString": "struct DataTypes.Reserve memory"
                              }
                            },
                            "id": 55199,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "15625:20:132",
                            "memberName": "currentLiquidityRate",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 64752,
                            "src": "15617:28:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 55200,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "15649:1:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "15617:33:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "15590:60:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "expression": {
                          "id": 55203,
                          "name": "Errors",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 57944,
                          "src": "15652:6:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Errors_$57944_$",
                            "typeString": "type(library Errors)"
                          }
                        },
                        "id": 55204,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "15659:27:132",
                        "memberName": "LPC_RESERVE_LIQUIDITY_NOT_0",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 57814,
                        "src": "15652:34:132",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 55194,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "15582:7:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 55205,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15582:105:132",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 55206,
                  "nodeType": "ExpressionStatement",
                  "src": "15582:105:132"
                }
              ]
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_checkReserveNoLiquidity",
            "nameLocation": "15319:24:132",
            "parameters": {
              "id": 55170,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 55169,
                  "mutability": "mutable",
                  "name": "reserveId",
                  "nameLocation": "15352:9:132",
                  "nodeType": "VariableDeclaration",
                  "scope": 55208,
                  "src": "15344:17:132",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 55168,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15344:7:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15343:19:132"
            },
            "returnParameters": {
              "id": 55171,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15377:0:132"
            },
            "scope": 55222,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 55221,
            "nodeType": "FunctionDefinition",
            "src": "15701:137:132",
            "nodes": [],
            "body": {
              "id": 55220,
              "nodeType": "Block",
              "src": "15765:73:132",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 55215,
                            "name": "_addressProvider",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 53978,
                            "src": "15796:16:132",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAddressProvider_$46447",
                              "typeString": "contract IAddressProvider"
                            }
                          },
                          "id": 55216,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "15813:14:132",
                          "memberName": "getLendingPool",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 46256,
                          "src": "15796:31:132",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                            "typeString": "function () view external returns (address)"
                          }
                        },
                        "id": 55217,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15796:33:132",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 55214,
                      "name": "ILendingPool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 48084,
                      "src": "15783:12:132",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_ILendingPool_$48084_$",
                        "typeString": "type(contract ILendingPool)"
                      }
                    },
                    "id": 55218,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15783:47:132",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPool_$48084",
                      "typeString": "contract ILendingPool"
                    }
                  },
                  "functionReturnParameters": 55213,
                  "id": 55219,
                  "nodeType": "Return",
                  "src": "15776:54:132"
                }
              ]
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getLendingPool",
            "nameLocation": "15710:15:132",
            "parameters": {
              "id": 55209,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15725:2:132"
            },
            "returnParameters": {
              "id": 55213,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 55212,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 55221,
                  "src": "15751:12:132",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ILendingPool_$48084",
                    "typeString": "contract ILendingPool"
                  },
                  "typeName": {
                    "id": 55211,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 55210,
                      "name": "ILendingPool",
                      "nameLocations": [
                        "15751:12:132"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 48084,
                      "src": "15751:12:132"
                    },
                    "referencedDeclaration": 48084,
                    "src": "15751:12:132",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPool_$48084",
                      "typeString": "contract ILendingPool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15750:14:132"
            },
            "scope": 55222,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 53963,
              "name": "Initializable",
              "nameLocations": [
                "1646:13:132"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 26136,
              "src": "1646:13:132"
            },
            "id": 53964,
            "nodeType": "InheritanceSpecifier",
            "src": "1646:13:132"
          },
          {
            "baseName": {
              "id": 53965,
              "name": "IConfigurator",
              "nameLocations": [
                "1661:13:132"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 47089,
              "src": "1661:13:132"
            },
            "id": 53966,
            "nodeType": "InheritanceSpecifier",
            "src": "1661:13:132"
          },
          {
            "baseName": {
              "id": 53967,
              "name": "ContextUpgradeable",
              "nameLocations": [
                "1676:18:132"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 28988,
              "src": "1676:18:132"
            },
            "id": 53968,
            "nodeType": "InheritanceSpecifier",
            "src": "1676:18:132"
          }
        ],
        "canonicalName": "Configurator",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 53962,
          "nodeType": "StructuredDocumentation",
          "src": "1463:158:132",
          "text": "@title Configuration contract for the FluidNFT protocol.\n @author FluidNFT\n @dev Implements the confiurations mehtods for the FluidNFT protocol."
        },
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          55222,
          28988,
          47089,
          26136
        ],
        "name": "Configurator",
        "nameLocation": "1630:12:132",
        "scope": 55223,
        "usedErrors": []
      }
    ],
    "license": "AGPL-3.0"
  },
  "id": 132
}
```

</details>


# IConfigurator

{% tabs %}
{% tab title="IConfigurator.sol" %}

```solidity
// SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.16;

import { DataTypes } from "../protocol/libraries/types/DataTypes.sol";
import { ConfigTypes } from "../protocol/libraries/types/ConfigTypes.sol";

interface IConfigurator {
    /**
     * @dev Emitted when borrowing is enabled on a reserve
     * @param reserveId The id of the reserve
     **/
    event BorrowingEnabledOnReserve(uint256 indexed reserveId);

    /**
     * @dev Emitted when borrowing is disabled on a reserve
     * @param reserveId The id of the reserve
     **/
    event BorrowingDisabledOnReserve(uint256 indexed reserveId);

    /**
     * @dev Emitted when variable rate borrowing is enabled on a reserve
     * @param reserveId The id of the reserve
     **/
    event VariableRateBorrowingEnabledOnReserve(uint256 indexed reserveId);

    /**
     * @dev Emitted when variable rate borrowing is disabled on a reserve
     * @param reserveId The id of the reserve
     **/
    event VariableRateBorrowingDisabledOnReserve(uint256 indexed reserveId);


    /**
     * @dev Emitted when a reserve is activated
     * @param reserveId The id of the reserve
     **/
    event ReserveActivated(uint256 indexed reserveId);

    /**
     * @dev Emitted when a reserve is deactivated
     * @param reserveId The id of the reserve
     **/
    event ReserveDeactivated(uint256 indexed reserveId);

    /**
     * @dev Emitted when a reserve is frozen
     * @param reserveId The id of the reserve
     **/
    event ReserveFrozen(uint256 indexed reserveId);

    /**
     * @dev Emitted when a reserve is unfrozen
     * @param reserveId The id of the reserve
     **/
    event ReserveUnfrozen(uint256 indexed reserveId);

    /**
     * @dev Emitted when a reserve factor is updated
     * @param reserveId The id of the reserve
     * @param factor The new reserve factor
     **/
    event ReserveFactorChanged(uint256 indexed reserveId, uint256 factor);

    /**
     * @dev Emitted when a reserve interest strategy contract is updated
     * @param reserveId The id of the reserve
     * @param strategy The new address of the interest strategy contract
     **/
    event ReserveInterestRateChanged(uint256 indexed reserveId, address strategy);

    /**
     * @dev Emitted when a reserve collateral configuration is updated
     * @param reserveId The id of the reserve
     * @param ltv The loan to value of the asset when used as NFT
     * @param liquidationThreshold The threshold at which loans using this asset as NFT will be considered undercollateralized
     * @param liquidationBonus The bonus liquidators receive to liquidate this asset
     **/
    event ReserveCollateralConfigurationChanged(
        uint256 indexed reserveId, 
        uint256 ltv,
        uint256 liquidationThreshold,
        uint256 liquidationBonus
    );

    /**
     * @dev Emitted when a reserve auction is updated
     * @param reserveId The id of the reserve
     * @param liquidationBonus The new liquidation bonus
     * @param auctionDuration The new auction duration
     * @param auctionPriceMultiple The dutch auction start price multiple
     **/
    event ReserveAuctionChanged(uint256 indexed reserveId, uint256 liquidationBonus, uint256 auctionDuration, uint256 auctionPriceMultiple);

    /**
     * @dev Emitted when a redeem threshold is updated
     * @param reserveId The id of the reserve
     * @param redeemThreshold The new redeem threshold
     **/
    event ReserveRedeemThresholdChanged(uint256 indexed reserveId, uint256 redeemThreshold);

    /**
     * @dev Emitted when a reserve max supply is updated
     * @param reserveId The id of the reserve
     * @param maxSupply The new maximum supply
     **/
    event ReserveMaxSupplyChanged(uint256 indexed reserveId, uint256 maxSupply);

    /**
     * @dev Emitted when max number of reserves is updated
     * @param maxNumberOfReserves The new maximum number of reserves
     **/
    event MaxNumberOfReservesChanged(uint256 maxNumberOfReserves);

    /**
     * @dev Emitted when the price consumer asset price method is updated
     * @param method The new price consumer method
     **/
    event PriceConsumerAssetPriceMethodChanged(string method);

    /**
     * @dev Emitted when the price consumer NFT price method is updated
     * @param method The new price consumer method
     **/
    event PriceConsumerNftPriceMethodChanged(string method);

    /**
     * @dev Emitted when a reserve is initialized.
     * @param reserveId The id of the reserve
     * @param collateral The address of the underlying collateral of the reserve
     * @param asset The address of the underlying asset of the reserve
     * @param fToken The address of the associated fToken contract
     * @param stableDebtToken The address of the associated stableDebtToken contract
     * @param variableDebtToken The address of the associated variableDebtToken contract
     * @param interestRateStrategyAddress The address of the interest rate strategy for the reserve
     **/
    event ReserveInitialized(
        uint256 indexed reserveId,
        address indexed collateral,
        address indexed asset,
        address fToken,
        address stableDebtToken,
        address variableDebtToken,
        address interestRateStrategyAddress
    );

    /**
     * @dev Emitted when an fToken implementation is upgraded
     * @param reserveId The id of the reserve
     * @param collateral The address of the underlying collateral of the reserve
     * @param asset The address of the underlying asset of the reserve
     * @param proxy The fToken proxy address
     * @param implementation The new fToken implementation
     **/
    event FTokenUpgraded(
        uint256 indexed reserveId,
        address collateral, 
        address asset, 
        address indexed proxy, 
        address indexed implementation
    );

    /**
     * @dev Emitted when the implementation of a debtToken is upgraded
     * @param reserveId The id of the reserve
     * @param collateral The address of the underlying collateral of the reserve
     * @param asset The address of the underlying asset of the reserve
     * @param proxy The debt token proxy address
     * @param implementation The new debtToken implementation
     **/
    event DebtTokenUpgraded(
        uint256 indexed reserveId,
        address collateral, 
        address asset, 
        address indexed proxy, 
        address indexed implementation
    );

    function batchInitLendingPoolReserve(
        ConfigTypes.InitReserveInput[] calldata input
    ) 
        external
        returns (
            address[] memory, 
            address[] memory, 
            address[] memory
        );

    function setActiveFlagOnReserve(
        uint256[] calldata reserveIds, 
        bool flag
    ) external;

    function setBorrowingFlagOnReserve(
        uint256[] calldata reserveIds, 
        bool flag
    ) external;

    function setVariableRateBorrowingFlagOnReserve(
        uint256[] calldata reserveIds, 
        bool flag
    ) external;

    function setFreezeFlagOnReserve(
        uint256[] calldata reserveIds, 
        bool flag
    ) external;

    function setPoolPause(bool val) external;

    function setPoolPausedTime(uint256 startTime, uint256 durationTime) external;

    function setMaxNumberOfReserves(uint256 newVal) external;

    function setReserveFactor(
        uint256[] calldata reserveIds, 
        uint256 reserveFactor
    ) external;

    function setReserveInterestRateAddress(
        uint256[] calldata reserveIds, 
        address rateAddress) external;

    function setReserveCreatorAddress(uint256 reserveId, address creator) external;

    function setReserveCreatorPercentage(uint256 reserveId, uint256 percentage) external;

    function setReserveMaxSupply(
        uint256[] calldata reserveIds, 
        uint256 maxSupply
    ) external;

    function configureReserveAuction(
        uint256[] calldata reserveIds, 
        uint256 liquidationBonus,
        uint256 auctionDuration,
        uint256 auctionPriceMultiple
    ) external;

    function batchConfigReserve(ConfigTypes.ConfigReserveInput[] calldata input) external;
    
    function updateFToken(ConfigTypes.UpdateFTokenInput[] calldata inputs) external;

    function updateStableDebtToken(ConfigTypes.UpdateDebtTokenInput[] calldata inputs) external;

    function updateVariableDebtToken(ConfigTypes.UpdateDebtTokenInput[] calldata inputs) external;

    function approveExecutionDelegateContracts(address[] calldata inputs) external;
}
```

{% endtab %}

{% tab title="DataTypes.sol" %}

```solidity
// SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.16;

library DataTypes {

    /// -----------------------------------------------------------------------
    /// Exec
    /// -----------------------------------------------------------------------
    
    struct ExecItemParams {
        address target;
        bytes payload;
    }

    struct ExecBatchItemParams {
        address[] targets;
        bytes[] payloads;
        bool[] allowErrors;
    }

    /// -----------------------------------------------------------------------
    /// P2Pool
    /// -----------------------------------------------------------------------

    enum BorrowStatus { 
        None, // Default zero
        Active, // Open
        Repaid, // Closed, paid by borrower
        Auction, // In Auction
        Liquidated // Closed, paid by liquidator
    }

    enum PriceGroupStatus {
        None, // Default zero
        Active, // Able to set / get prices
        Paused, // Not able to perform any operation
        Protected // Only able to get prices
    }
    
    struct Reserve {
        ReserveConfigurationMap configuration;
        address collateral;
        address asset;
        address fTokenAddress;
        address stableDebtTokenAddress;
        address variableDebtTokenAddress;
        address interestRateAddress;
        string assetPriceFeed;
        uint256 id;
        uint256 maxTokenSupply;
        uint256 maxTokenId;
        uint256 minTokenId;
        uint128 liquidityIndex;
        uint128 variableBorrowIndex;
        uint128 currentLiquidityRate;
        uint128 currentVariableBorrowRate;
        uint40 lastUpdateTimestamp;
    }

    struct ReserveData {
        address collateral;
        address asset;
        uint256 maxTokenId;
        uint256 minTokenId;
    }

    struct InitReserveData {
        uint256 reserveId;
        address collateral;
        address asset;
        uint256 maxTokenId;
        uint256 minTokenId;
        address fTokenAddress;
        address stableDebtTokenAddress;
        address variableDebtTokenAddress;
        address interestRateAddress;
        string assetPriceFeed;
    }

    struct ReserveConfigurationMap {
        //bit 0-15: LTV
        //bit 16-31: Liq. threshold
        //bit 32-47: Liq. bonus
        //bit 48-55: Decimals
        //bit 56: Reserve is active
        //bit 57: reserve is frozen
        //bit 58: borrowing is enabled
        //bit 59: variable rate borrowing enabled
        //bit 60-63: reserved
        //bit 64-79: reserve factor
        //bit 80-95: grace period
        //bit 96-111: auction duration
        //bit 112-127: auction start price multiple
        uint256 data;
    }

    struct NFTPriceGroup {
        NFTPriceGroupConfigurationMap configuration;
        PriceGroupStatus status;
        address[15] nfts;
        uint256[15] reserveIds; 
        uint256[15] traitIds; 
        uint256[15] basePrices;
        uint256 id;
    } 

    struct NFTPriceGroupConfigurationMap {
        //bit 0-15: DELTA_01
        //bit 16-31: DELTA_02
        //bit 32-47: DELTA_03
        //bit 48-63: DELTA_04
        //bit 64-79: DELTA_05
        //bit 80-95: DELTA_06
        //bit 96-111: DELTA_07
        //bit 112-127: DELTA_08
        //bit 128-143: DELTA_09
        //bit 144-159: DELTA_10
        //bit 160-175: DELTA_11
        //bit 176-191: DELTA_12
        //bit 192-207: DELTA_13
        //bit 208-223: DELTA_14
        //bit 224-239: DELTA_15
        //bit 240: SIGN_01
        //bit 241: SIGN_02
        //bit 242: SIGN_03
        //bit 243: SIGN_04
        //bit 244: SIGN_05
        //bit 245: SIGN_06
        //bit 246: SIGN_07
        //bit 247: SIGN_08
        //bit 248: SIGN_09
        //bit 249: SIGN_10
        //bit 250: SIGN_11
        //bit 251: SIGN_12
        //bit 252: SIGN_13
        //bit 253: SIGN_14
        //bit 254: SIGN_15
        uint256 data;
    }

    struct Auction {
        address caller;
        uint256 startPrice;
        uint256 endPrice;
        uint256 timestamp;
    }

    struct Borrow {
        BorrowStatus status;
        Collateral collateral;
        Auction auction;
        address borrower;
        address erc20Token;
        uint256 borrowAmount; 
        uint256 scaledAmount;
        uint256 timestamp;
        uint256 duration;
        uint256 reserveId;
        uint256 tokenizedId;
    }

    struct ExecuteDepositParams {
        address initiator;
        uint256 amount;
        uint256 reserveId;
        address onBehalfOf;
        uint16 referralCode;
    }

    struct ExecuteBatchDepositParams {
        address initiator;
        uint256[] amounts;
        uint256[] reserveIds;
        address[] onBehalfOfs;
        uint16[] referralCodes;
    }

    struct ExecuteWithdrawParams {
        address initiator;
        uint256 amount;
        uint256 reserveId;
        address to;
    }

    struct ExecuteBatchWithdrawParams {
        address initiator;
        uint256[] amounts;
        uint256[] reserveIds;
        address[] tos;
    }

    struct ExecuteBorrowParams {
        address initiator;
        uint256 amount;
        uint256 tokenId;
        uint256 tokenValue;
        uint256 reserveId;
        uint256 duration;
        address onBehalfOf;
        uint16 referralCode;
    }

    struct ExecuteBatchBorrowParams {
        address initiator;
        uint256[] amounts;
        uint256[] tokenIds;
        uint256[] tokenValues;
        uint256[] reserveIds;
        uint256 duration;
        address onBehalfOf;
        uint16 referralCode;
    }

    struct ExecuteRepayParams {
        address initiator;
        uint256 borrowId;
        uint256 amount;
    }

    struct ExecuteBatchRepayParams {
        address initiator;
        uint256[] borrowIds;
        uint256[] amounts;
    }

    struct ExecuteRefinanceParams {
        address initiator;
        uint256 borrowId;
        uint256 amount;
        uint256 duration;
    }

    struct ExecuteBatchRefinanceParams {
        address initiator;
        uint256[] borrowIds;
        uint256[] amounts;
        uint256[] durations;
    }

    struct ExecuteAuctionParams {
        address initiator;
        uint256 borrowId;
        address onBehalfOf;
    }

    struct ExecuteBatchAuctionParams {
        address initiator;
        uint256[] borrowIds;
        address[] onBehalfOfs;
    }

    struct ExecuteBidParams {
        address initiator;
        address asset;
        uint256 amount;
        uint256 borrowId;
        address onBehalfOf;
    }

    struct ExecuteBatchBidParams {
        address initiator;
        address[] assets;
        uint256[] amounts;
        uint256[] borrowIds;
        address[] onBehalfOfs;
    }

    /// -----------------------------------------------------------------------
    /// Tokenized 
    /// -----------------------------------------------------------------------

    struct TokenizedLoan {
        address collateral;
        uint256 tokenId;
        uint256 id;
    }

    /// -----------------------------------------------------------------------
    /// P2Peer
    /// -----------------------------------------------------------------------

    enum LoanStatus {
        None, // Default zero
        Escrow, // Open
        Repaid, // Closed, lender received repayment 
        Refinanced, // Closed, lender received repayment 
        Foreclosed // Closed, lender received collateral
    }

    enum Side { Offer,  Listing }

    enum SignatureVersion { Single, Bulk }

    enum CollateralType { ERC721, ERC1155 } //TODO

    enum LoanType {
        Loan,
        Trait,
        Collection,
        Bundle,
        Renegotiation,
        Refinancing
    }

    struct Terms {
        LoanType loanType;
        /* Order collaterlTypes - empty item if not isBundle. */
        CollateralType[] collateralTypes;
        CollateralType collateralType;
        /* Order collaterals & tokenIds - empty if not isBundle. */
        address[] collaterals;
        uint256[] tokenIds;
        /* Order values - empty item if not ERC1155. */
        uint256[] values;
        /* Order collateral & tokenId - address(0) if isBundle. */
        address collateral;
        uint256 tokenId;
        /* Order value - empty item if not ERC1155. */
        uint256 value;
        address asset;
        uint256 amount;
        /* Order maximumRepayment - used for both fixed price and pro-rata loans. */
        uint256 maximumRepayment;
        /* Order minimumRepayment - used for pro-rata loans, 0 if none */
        uint256 minimumRepayment;
        /* Order interestRateInBasisPoints - used for pro-rata loans. */
        uint256 interestRateInBasisPoints; 
        uint256 duration;
        /* Loan isProRata - used enable pro-rata loan repayments. */
        bool isProRata;
        bool isBundle;
        /* Order loanId - 0 if creating a new loan. */
        uint256 loanId;
        /* Order fee - paid on renegotiation. */
        uint256 fee;
    }

    struct Order {
        address user;
        /* Referrer - for new loans & refinancing (borrower-side). */
        address referrer;
        Side side;
        Terms terms;
        /* Order counterparty - address(0) for open order. */
        address counterparty;
        bool isInstantExecution; 
        /* Order loanRepayment - for refinancing. */
        uint256 loanRepayment;
        uint256 listingTime;
        uint256 expirationTime;
        uint256 salt;
        /* Order message - for renegotiations. */
        string message;
        bytes extraParams;
        /* Borrow Id - for p2pool orders. */
        uint256 borrowId;
        /* Reserve Id - for fToken orders. */
        uint256 reserveId;
    }

    struct Input {
        Order order;
        uint8 v;
        bytes32 r;
        bytes32 s;
        bytes extraSignature;
        SignatureVersion signatureVersion;
        uint256 blockNumber;
    }

    struct Execution {
        Input offer;
        Input listing;
    }

    struct Collateral {
        /* Loan collateralType - ERC721 or ERC1155. */
        CollateralType collateralType;
        address collateral;
        uint256 tokenId;
        /* Loan value - collateral token amount (ERC1155, only). */
        uint256 value;
    }

    struct Collaterals {
        /* Loan collateralType - ERC721 or ERC1155. */
        CollateralType[] collateralTypes;
        address[] collaterals;
        uint256[] tokenIds;
        /* Loan value - collateral token amount (ERC1155, only). */
        uint256[] values;
    }

    struct Principal {
        address asset;
        uint256 amount;
    }

    struct Interest {
        /* Loan:Interest rate - in basis points (1/100th of a percent), used in pro-rata loans. */
        uint256 rate;
        /* Loan.Interest isProRata - to enable pro-rata loan repayments. */
        bool isProRata;
    }

    struct Repayment {
        /* Loan Repayment.maximum - used in both fixed price & pro-rata loans. */
        uint256 maximum;
        /* Loan Repayment.minimum - (optional) used in pro-rata loans. */
        uint256 minimum;
    }

    struct Loan {
        LoanStatus status;
        Collateral collateral;
        Principal principal;
        Interest interest;
        Repayment repayment;
        address borrower;
        address lender;
        address referrer;
        uint256 timestamp;
        uint256 duration;
        /* Loan tokenizedId - tokenId of promissoryNote and obligationReceipt. */
        uint256 tokenizedId;
    }

    struct LoanBundle {
        LoanStatus status;
        Collaterals collaterals;
        Principal principal;
        Interest interest;
        Repayment repayment;
        address borrower;
        address lender;
        address referrer;
        uint256 timestamp;
        uint256 duration;
        /* Loan tokenizedId - tokenId of promissoryNote and obligationReceipt. */
        uint256 tokenizedId;
    } 

    struct ExecuteNewLoanParams {
        DataTypes.Terms terms;
        address borrower;
        address lender;
        address referrer;
        /* Borrow Id - for p2pool Orders */
        uint256 borrowId;
        /* Reserve Id - for fToken Orders */
        uint256 reserveId;
    }

    struct ExecuteRepayLoanParams {
        uint256 loanId;
        uint256 lendingFactor;
        /* Reserve Id - for fToken repayment */
        uint256 reserveId;
    }

    struct ExecuteForecloseLoanParams {
        uint256 loanId;
    }

    struct ExecuteRenegotiateLoanParams {
        DataTypes.Terms terms;
        address borrower;
        address lender;
        /* Reserve Ids - for fToken Orders */
        uint256 borrowerReserveId;
        uint256 lenderReserveId;
    }

    struct ExecuteRefinanceLoanParams {
        DataTypes.Terms terms;
        address borrower;
        address lender;
        address referrer;
        uint256 loanRepayment;
        uint256 lendingFactor;
        /* Reserve Ids - for fToken Orders */
        uint256 borrowerReserveId;
        uint256 lenderReserveId;
    }
}
```

{% endtab %}

{% tab title="ConfigTypes.sol" %}

```solidity
// SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.16;

library ConfigTypes {
    struct InitReserveInput {
        //collateral params
        address underlyingCollateral;
        string underlyingCollateralName;
        string underlyingCollateralSymbol;
        uint256 underlyingMaxTokenId;
        uint256 underlyingMinTokenId;
        //asset params
        address underlyingAsset;
        string underlyingAssetName;
        string underlyingAssetSymbol;
        uint8 underlyingAssetDecimals;
        //fToken params
        address fTokenImpl;
        string fTokenName;
        string fTokenSymbol;
        //stable debtToken params
        address stableDebtTokenImpl;
        string stableDebtTokenName;
        string stableDebtTokenSymbol;
        //variable debtToken params
        address variableDebtTokenImpl;
        string variableDebtTokenName;
        string variableDebtTokenSymbol;
        //risk params
        address interestRateStrategy;
        uint256 baseLTV;
        //account params
        address treasury;
        address creator;
        //fee params
        uint256 creatorPercentage;
        //auction params
        uint256 auctionCallerPercentage;
        uint256 auctionCreatorPercentage;
        //oracle params
        string assetPriceFeed;
    }

    struct ConfigReserveInput {
        //reserve params
        uint256 reserveId;
        uint256 reserveFactor;
        //collateral params
        uint256 ltv;
        //asset params
        uint256 decimals;
        //default params
        uint256 gracePeriod;
        uint256 liquidationBonus;
        uint256 liquidationThreshold;
        //auction params
        uint256 auctionDuration;
        uint256 auctionPriceMultiple;
        //conditional params
        bool borrowingEnabled;
    }

    struct InitNFTPriceGroupDataInput {
        address[15] nfts;
        uint256[15] reserveIds; 
        uint256[15] traitIds; 
        uint256[15] basePrices;
    }

    struct BasePriceInput {
        uint256 groupId;
        address[15] nfts;
        uint256[15] traitIds;
        uint256[15] basePrices;
    }

    struct DeltaInput {
        uint256 groupId;
        uint256[15] nfts;
        uint256[15] currentPrices;
    }

    struct UpdateFTokenInput {
        address collateral;
        address asset;
        address implementation;
        uint256 reserveId;
        bytes encodedCallData;
    }

    struct UpdateDebtTokenInput {
        address collateral;
        address asset;
        address implementation;
        uint256 reserveId;
        bytes encodedCallData;
    }
}
```

{% endtab %}
{% endtabs %}


# Interest Rate Strategy

The `InterestRateStrategy` contract manages loan interest rates with theses being dependent on the utilisation of liquidity within the lending pool reserve

## Methods <a href="#functionality" id="functionality"></a>

### calculateInterestRate()[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#functionality) <a href="#functionality" id="functionality"></a>

**`function calculateInterestRate(uint256 reserveId, uint256 availableLiquidity, uint256 totalStableDebt, uint256 totalVariableDebt, uint256 averageStableBorrowRate, uint256 reserveFactor)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Calculates the interest rate depending on the reserve's state and configurations.

<table><thead><tr><th width="285.06057385759834">Parameter Name</th><th width="113">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>reserveId</code></td><td>uint256</td><td>id of the targeted reserve</td></tr><tr><td><code>availableLiquidity</code></td><td>uint256</td><td>amount of liquidity available in the reserve</td></tr><tr><td><code>totalStableDebt</code></td><td>uint256</td><td>total amount of stable debt</td></tr><tr><td><code>totalVariableDebt</code></td><td>uint256</td><td>total amount of variable debt</td></tr><tr><td><code>averageStableBorrowRate</code></td><td>uint256</td><td>average stable borrow rate</td></tr><tr><td><code>reserveFactor</code></td><td>uint256</td><td>reserve factor for the reserve, i.e. percentage of yield going to the protocol</td></tr></tbody></table>

#### Returns

<table><thead><tr><th width="293.3333333333333">Parameter Name</th><th width="110.46971307120089">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>liquidityRate</code></td><td>uint256</td><td>liquidity rate of the reserve</td></tr><tr><td><code>stableBorrowRate</code></td><td>uint256</td><td>stable borrow interest rate</td></tr><tr><td><code>variableBorrowRate</code></td><td>uint256</td><td>variable borrow interest rate</td></tr></tbody></table>

### calculateInterestRates()[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#functionality) <a href="#functionality" id="functionality"></a>

**`function calculateInterestRate(uint256 reserveId, address asset, address fToken, uint256 liquidityAdded, uint256 liquidityTaken, uint256 totalStableDebt, uint256 totalVariableDebt, uint256 averageStableBorrowRate, uint256 reserveFactor)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

<table><thead><tr><th width="289.06057385759834">Parameter Name</th><th width="121">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>reserveId</code></td><td>uint256</td><td>id of the targeted reserve</td></tr><tr><td><code>asset</code></td><td>address</td><td>address of the currency</td></tr><tr><td><code>fToken</code></td><td>address</td><td>address of the fToken proxy</td></tr><tr><td><code>liquidityAdded</code></td><td>uint256</td><td>amount of liquidity added</td></tr><tr><td><code>liquidityTaken</code></td><td>uint256</td><td>amount of liquidity taken</td></tr><tr><td><code>totalStableDebt</code></td><td>uint256</td><td>total amount of stable debt</td></tr><tr><td><code>totalVariableDebt</code></td><td>uint256</td><td>total amount of variable debt</td></tr><tr><td><code>averageStableBorrowRate</code></td><td>uint256</td><td>average stable borrow rate</td></tr><tr><td><code>reserveFactor</code></td><td>uint256</td><td>reserve factor for the reserve, i.e. percentage of yield going to the protocol</td></tr></tbody></table>

Calculates the interest rate depending on the reserve's state and configurations.

#### Returns

<table><thead><tr><th width="258.3333333333333">Parameter Name</th><th width="136.46971307120089">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>liquidityRate</code></td><td>uint256</td><td>liquidity rate of the reserve</td></tr><tr><td><code>stableBorrowRate</code></td><td>uint256</td><td>stable borrow interest rate</td></tr><tr><td><code>variableBorrowRate</code></td><td>uint256</td><td>variable borrow interest rate</td></tr></tbody></table>

## View Methods <a href="#functionality" id="functionality"></a>

### variableRateSlope1()[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#functionality) <a href="#functionality" id="functionality"></a>

**`function variableRateSlope1()`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Returns `slope1` of the variable interest rate.

### variableRateSlope2()[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#functionality) <a href="#functionality" id="functionality"></a>

**`function variableRateSlope2()`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Returns `slope2` of the variable interest rate.

### stableRateSlope1()[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#functionality) <a href="#functionality" id="functionality"></a>

**`function stableRateSlope1()`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Returns `slope1` of the stable interest rate.

### stableRateSlope2()[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#functionality) <a href="#functionality" id="functionality"></a>

**`function stableRateSlope2()`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Returns `slope2` of the stable interest rate.

### baseVariableBorrowRate()[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#functionality) <a href="#functionality" id="functionality"></a>

**`function baseVariableBorrowRate()`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Returns the base variable borrow `rate`.

### maxVariableBorrowRate()[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#functionality) <a href="#functionality" id="functionality"></a>

**`function maxVariableBorrowRate()`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Returns the max variable borrow `rate`.

## ABI

<details>

<summary>Interest Rate Strategy ABI</summary>

```
{
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IAddressProvider",
          "name": "addressprovider_",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "optimalUtilizationRate_",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "baseVariableBorrowRate_",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "variableRateSlope1_",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "variableRateSlope2_",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "stableRateSlope1_",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "stableRateSlope2_",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "EXCESS_UTILIZATION_RATE",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "OPTIMAL_UTILIZATION_RATE",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "addressProvider",
      "outputs": [
        {
          "internalType": "contract IAddressProvider",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "baseVariableBorrowRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "availableLiquidity",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "totalStableDebt",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "totalVariableDebt",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "averageStableBorrowRate",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "reserveFactor",
          "type": "uint256"
        }
      ],
      "name": "calculateInterestRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "fToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "liquidityAdded",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "liquidityTaken",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "totalStableDebt",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "totalVariableDebt",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "averageStableBorrowRate",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "reserveFactor",
          "type": "uint256"
        }
      ],
      "name": "calculateInterestRates",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "maxVariableBorrowRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "stableRateSlope1",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "stableRateSlope2",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "variableRateSlope1",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "variableRateSlope2",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x61018060405234801561001157600080fd5b50604051610dd0380380610dd0833981016040819052610030916100b5565b85608081815250506100608661004e61009060201b6107bc1760201c565b6100a060201b6107cc1790919060201c565b60a0526001600160a01b0390961660c05260e093909352610100919091526101205261014052506101605261013f565b6b033b2e3c9fd0803ce800000090565b60006100ac828461011e565b90505b92915050565b600080600080600080600060e0888a0312156100d057600080fd5b87516001600160a01b03811681146100e757600080fd5b602089015160408a015160608b015160808c015160a08d015160c0909d0151949e939d50919b909a50909850965090945092505050565b818103818111156100af57634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e05161010051610120516101405161016051610bb76102196000396000818161022d015261059101526000818160b0015281816105c101526106ab0152600081816101530152818161025801526105f20152600081816101790152818161029d0152818161063d01526107150152600081816102070152818161027c0152818161061c015261073b01526000818161010f015261040501526000818160e8015261052b0152600081816101e3015281816104ff0152818161054f0152818161067701526106ef0152610bb76000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80637b832f58116100715780637b832f58146101775780637d8a872d1461019d5780639b9c5b49146101cb578063a15f30ac146101de578063b258954414610205578063ccab01a31461022b57600080fd5b80630bdf953f146100ae57806317319873146100e35780632954018c1461010a578063643d41f21461014957806365614f8114610151575b600080fd5b7f00000000000000000000000000000000000000000000000000000000000000005b6040519081526020015b60405180910390f35b6100d07f000000000000000000000000000000000000000000000000000000000000000081565b6101317f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100da565b6100d0610251565b7f00000000000000000000000000000000000000000000000000000000000000006100d0565b7f00000000000000000000000000000000000000000000000000000000000000006100d0565b6101b06101ab3660046109be565b6102cc565b604080519384526020840192909252908201526060016100da565b6101b06101d9366004610a36565b61037b565b6100d07f000000000000000000000000000000000000000000000000000000000000000081565b7f00000000000000000000000000000000000000000000000000000000000000006100d0565b7f00000000000000000000000000000000000000000000000000000000000000006100d0565b60006102c77f00000000000000000000000000000000000000000000000000000000000000006102c17f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006107e1565b906107e1565b905090565b6040516370a0823160e01b81526001600160a01b0388811660048301526000918291829182918d16906370a0823190602401602060405180830381865afa15801561031b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061033f9190610a79565b90506103558961034f838d6107e1565b906107cc565b90506103658d828a8a8a8a61037b565b9350935093505099509950999650505050505050565b60008060006103b26040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6103bc88886107e1565b808252600060408301819052602083018190526060830152156103f75780516103f2906103ea908b906107e1565b8251906107ed565b6103fa565b60005b8160800181815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663617e06056040518163ffffffff1660e01b8152600401602060405180830381865afa158015610461573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104859190610a92565b6001600160a01b031663f12c8b358b6040518263ffffffff1660e01b81526004016104b291815260200190565b602060405180830381865afa1580156104cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f39190610a79565b604082015260808101517f0000000000000000000000000000000000000000000000000000000000000000101561066c5760006105877f00000000000000000000000000000000000000000000000000000000000000006105817f000000000000000000000000000000000000000000000000000000000000000085608001516107cc90919063ffffffff16565b906107ed565b90506105e56105b67f00000000000000000000000000000000000000000000000000000000000000008361082f565b60408401516102c1907f00000000000000000000000000000000000000000000000000000000000000006107e1565b60408301526106616106177f00000000000000000000000000000000000000000000000000000000000000008361082f565b6102c17f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006107e1565b602083015250610766565b6106db6106d06106a97f000000000000000000000000000000000000000000000000000000000000000084608001516107ed90919063ffffffff16565b7f00000000000000000000000000000000000000000000000000000000000000009061082f565b6040830151906107e1565b6040820152608081015161076090610739907f000000000000000000000000000000000000000000000000000000000000000090610581907f000000000000000000000000000000000000000000000000000000000000000061082f565b7f0000000000000000000000000000000000000000000000000000000000000000906107e1565b60208201525b610799610775612710876107cc565b610793836080015161078d8c8c87602001518d610865565b9061082f565b906108cd565b606082018190526040820151602090920151909b919a5098509650505050505050565b6b033b2e3c9fd0803ce800000090565b60006107d88284610acc565b90505b92915050565b60006107d88284610adf565b6000806107fb600284610af2565b90506108278361082161081a876b033b2e3c9fd0803ce800000061097e565b84906107e1565b9061098a565b949350505050565b60006107d86b033b2e3c9fd0803ce800000061082161084e868661097e565b6102c160026b033b2e3c9fd0803ce8000000610af2565b60008061087286866107e1565b905080600003610886576000915050610827565b60006108958561078d88610996565b905060006108a68561078d8a610996565b905060006108c06108b685610996565b61058185856107e1565b9998505050505050505050565b60008215806108da575081155b156108e7575060006107db565b816108f56002612710610af2565b61090190600019610acc565b61090b9190610af2565b8311156040518060400160405280600381526020016203230360ec1b815250906109515760405162461bcd60e51b81526004016109489190610b14565b60405180910390fd5b50612710610960600282610af2565b61096a8486610b62565b6109749190610adf565b6107d89190610af2565b60006107d88284610b62565b60006107d88284610af2565b60006107db82633b9aca0061097e565b6001600160a01b03811681146109bb57600080fd5b50565b60008060008060008060008060006101208a8c0312156109dd57600080fd5b8935985060208a01356109ef816109a6565b975060408a01356109ff816109a6565b989b979a5097986060810135985060808101359760a0820135975060c0820135965060e08201359550610100909101359350915050565b60008060008060008060c08789031215610a4f57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600060208284031215610a8b57600080fd5b5051919050565b600060208284031215610aa457600080fd5b8151610aaf816109a6565b9392505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156107db576107db610ab6565b808201808211156107db576107db610ab6565b600082610b0f57634e487b7160e01b600052601260045260246000fd5b500490565b600060208083528351808285015260005b81811015610b4157858101830151858201604001528201610b25565b506000604082860101526040601f19601f8301168501019250505092915050565b6000816000190483118215151615610b7c57610b7c610ab6565b50029056fea2646970667358221220b9696d36d84199f46617ec26b205bc5caf91a18f7fb7c5e906d3a5ed738abe9964736f6c63430008100033",
    "sourceMap": "958:9371:144:-:0;;;2520:751;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2853:23;2826:50;;;;;;2913:45;2934:23;2913:16;:14;;;;;:16;;:::i;:::-;:20;;;;;;:45;;;;:::i;:::-;2887:71;;-1:-1:-1;;;;;2969:34:144;;;;;3014:49;;;;;3074:41;;;;;3126;;3178:37;;-1:-1:-1;3226:37:144;;958:9371;;641:76:134;524:4;;641:76::o;3122:96:71:-;3180:7;3206:5;3210:1;3206;:5;:::i;:::-;3199:12;;3122:96;;;;;:::o;14:686:176:-;164:6;172;180;188;196;204;212;265:3;253:9;244:7;240:23;236:33;233:53;;;282:1;279;272:12;233:53;308:16;;-1:-1:-1;;;;;353:31:176;;343:42;;333:70;;399:1;396;389:12;333:70;467:2;452:18;;446:25;511:2;496:18;;490:25;555:2;540:18;;534:25;599:3;584:19;;578:26;644:3;629:19;;623:26;689:3;674:19;;;668:26;422:5;;446:25;;-1:-1:-1;490:25:176;;534;;-1:-1:-1;578:26:176;;-1:-1:-1;623:26:176;-1:-1:-1;668:26:176;;-1:-1:-1;14:686:176;-1:-1:-1;;;14:686:176:o;705:225::-;772:9;;;793:11;;;790:134;;;846:10;841:3;837:20;834:1;827:31;881:4;878:1;871:15;909:4;906:1;899:15;705:225;958:9371:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80637b832f58116100715780637b832f58146101775780637d8a872d1461019d5780639b9c5b49146101cb578063a15f30ac146101de578063b258954414610205578063ccab01a31461022b57600080fd5b80630bdf953f146100ae57806317319873146100e35780632954018c1461010a578063643d41f21461014957806365614f8114610151575b600080fd5b7f00000000000000000000000000000000000000000000000000000000000000005b6040519081526020015b60405180910390f35b6100d07f000000000000000000000000000000000000000000000000000000000000000081565b6101317f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100da565b6100d0610251565b7f00000000000000000000000000000000000000000000000000000000000000006100d0565b7f00000000000000000000000000000000000000000000000000000000000000006100d0565b6101b06101ab3660046109be565b6102cc565b604080519384526020840192909252908201526060016100da565b6101b06101d9366004610a36565b61037b565b6100d07f000000000000000000000000000000000000000000000000000000000000000081565b7f00000000000000000000000000000000000000000000000000000000000000006100d0565b7f00000000000000000000000000000000000000000000000000000000000000006100d0565b60006102c77f00000000000000000000000000000000000000000000000000000000000000006102c17f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006107e1565b906107e1565b905090565b6040516370a0823160e01b81526001600160a01b0388811660048301526000918291829182918d16906370a0823190602401602060405180830381865afa15801561031b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061033f9190610a79565b90506103558961034f838d6107e1565b906107cc565b90506103658d828a8a8a8a61037b565b9350935093505099509950999650505050505050565b60008060006103b26040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6103bc88886107e1565b808252600060408301819052602083018190526060830152156103f75780516103f2906103ea908b906107e1565b8251906107ed565b6103fa565b60005b8160800181815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663617e06056040518163ffffffff1660e01b8152600401602060405180830381865afa158015610461573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104859190610a92565b6001600160a01b031663f12c8b358b6040518263ffffffff1660e01b81526004016104b291815260200190565b602060405180830381865afa1580156104cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f39190610a79565b604082015260808101517f0000000000000000000000000000000000000000000000000000000000000000101561066c5760006105877f00000000000000000000000000000000000000000000000000000000000000006105817f000000000000000000000000000000000000000000000000000000000000000085608001516107cc90919063ffffffff16565b906107ed565b90506105e56105b67f00000000000000000000000000000000000000000000000000000000000000008361082f565b60408401516102c1907f00000000000000000000000000000000000000000000000000000000000000006107e1565b60408301526106616106177f00000000000000000000000000000000000000000000000000000000000000008361082f565b6102c17f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006107e1565b602083015250610766565b6106db6106d06106a97f000000000000000000000000000000000000000000000000000000000000000084608001516107ed90919063ffffffff16565b7f00000000000000000000000000000000000000000000000000000000000000009061082f565b6040830151906107e1565b6040820152608081015161076090610739907f000000000000000000000000000000000000000000000000000000000000000090610581907f000000000000000000000000000000000000000000000000000000000000000061082f565b7f0000000000000000000000000000000000000000000000000000000000000000906107e1565b60208201525b610799610775612710876107cc565b610793836080015161078d8c8c87602001518d610865565b9061082f565b906108cd565b606082018190526040820151602090920151909b919a5098509650505050505050565b6b033b2e3c9fd0803ce800000090565b60006107d88284610acc565b90505b92915050565b60006107d88284610adf565b6000806107fb600284610af2565b90506108278361082161081a876b033b2e3c9fd0803ce800000061097e565b84906107e1565b9061098a565b949350505050565b60006107d86b033b2e3c9fd0803ce800000061082161084e868661097e565b6102c160026b033b2e3c9fd0803ce8000000610af2565b60008061087286866107e1565b905080600003610886576000915050610827565b60006108958561078d88610996565b905060006108a68561078d8a610996565b905060006108c06108b685610996565b61058185856107e1565b9998505050505050505050565b60008215806108da575081155b156108e7575060006107db565b816108f56002612710610af2565b61090190600019610acc565b61090b9190610af2565b8311156040518060400160405280600381526020016203230360ec1b815250906109515760405162461bcd60e51b81526004016109489190610b14565b60405180910390fd5b50612710610960600282610af2565b61096a8486610b62565b6109749190610adf565b6107d89190610af2565b60006107d88284610b62565b60006107d88284610af2565b60006107db82633b9aca0061097e565b6001600160a01b03811681146109bb57600080fd5b50565b60008060008060008060008060006101208a8c0312156109dd57600080fd5b8935985060208a01356109ef816109a6565b975060408a01356109ff816109a6565b989b979a5097986060810135985060808101359760a0820135975060c0820135965060e08201359550610100909101359350915050565b60008060008060008060c08789031215610a4f57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600060208284031215610a8b57600080fd5b5051919050565b600060208284031215610aa457600080fd5b8151610aaf816109a6565b9392505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156107db576107db610ab6565b808201808211156107db576107db610ab6565b600082610b0f57634e487b7160e01b600052601260045260246000fd5b500490565b600060208083528351808285015260005b81811015610b4157858101830151858201604001528201610b25565b506000604082860101526040601f19601f8301168501019250505092915050565b6000816000190483118215151615610b7c57610b7c610ab6565b50029056fea2646970667358221220b9696d36d84199f46617ec26b205bc5caf91a18f7fb7c5e906d3a5ed738abe9964736f6c63430008100033",
    "sourceMap": "958:9371:144:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3509:103;3587:17;3509:103;;;160:25:176;;;148:2;133:18;3509:103:144;;;;;;;;1590:48;;;;;1647:49;;;;;;;;-1:-1:-1;;;;;386:32:176;;;368:51;;356:2;341:18;1647:49:144;196:229:176;3863:173:144;;;:::i;3394:107::-;3474:19;3394:107;;3279;3359:19;3279:107;;4772:925;;;;;;:::i;:::-;;:::i;:::-;;;;1643:25:176;;;1699:2;1684:18;;1677:34;;;;1727:18;;;1720:34;1631:2;1616:18;4772:925:144;1441:319:176;6603:2429:144;;;;;;:::i;:::-;;:::i;1296:49::-;;;;;3731:124;3824:23;3731:124;;3620:103;3698:17;3620:103;;3863:173;3928:7;3955:73;4008:19;3955:48;:23;3983:19;3955:27;:48::i;:::-;:52;;:73::i;:::-;3948:80;;3863:173;:::o;4772:925::-;5288:42;;-1:-1:-1;;;5288:42:144;;-1:-1:-1;;;;;386:32:176;;;5288:42:144;;;368:51:176;5180:7:144;;;;;;;;5288:34;;;;;341:18:176;;5288:42:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5259:71;-1:-1:-1;5394:58:144;5437:14;5394:38;5259:71;5417:14;5394:22;:38::i;:::-;:42;;:58::i;:::-;5373:79;;5472:217;5508:9;5532:18;5565:15;5595:17;5627:23;5665:13;5472:21;:217::i;:::-;5465:224;;;;;;;4772:925;;;;;;;;;;;;;:::o;6603:2429::-;6930:7;6952;6974;7009:38;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7009:38:144;7077;:15;7097:17;7077:19;:38::i;:::-;7060:55;;;:14;7126:28;;;:32;;;7169:30;;;:34;;;7214:25;;;:29;7279:19;:115;;7378:14;;7333:61;;7355:38;;:18;;:22;:38::i;:::-;7333:14;;;:21;:61::i;:::-;7279:115;;;7315:1;7279:115;7256:4;:20;;:138;;;;;7458:15;-1:-1:-1;;;;;7458:37:144;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;7438:94:144;;7533:9;7438:105;;;;;;;;;;;;;160:25:176;;148:2;133:18;;14:177;7438:105:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7407:28;;;:136;7560:20;;;;7583:24;-1:-1:-1;7556:979:144;;;7624:34;7661:82;7719:23;7661:50;7686:24;7661:4;:20;;;:24;;:50;;;;:::i;:::-;:57;;:82::i;:::-;7624:119;-1:-1:-1;7791:141:144;7865:52;:17;7624:119;7865:24;:52::i;:::-;7791:28;;;;:51;;7824:17;7791:32;:51::i;:141::-;7760:28;;;:172;7982:140;8053:54;:19;8080:26;8053;:54::i;:::-;7982:48;:23;8010:19;7982:27;:48::i;:140::-;7949:30;;;:173;-1:-1:-1;7556:979:144;;;8186:145;8237:79;8262:53;8290:24;8262:4;:20;;;:27;;:53;;;;:::i;:::-;8237:17;;:24;:79::i;:::-;8186:28;;;;;:32;:145::i;:::-;8155:28;;;:176;8427:20;;;;8381:142;;8427:81;;8483:24;;8427:48;;8455:19;8427:27;:48::i;:81::-;8381:23;;:27;:142::i;:::-;8348:30;;;:175;7556:979;8575:290;8813:51;470:3:133;8850:13:144;8813:36;:51::i;:::-;8575:216;8770:4;:20;;;8575:177;8611:15;8641:17;8673:4;:30;;;8718:23;8575:21;:177::i;:::-;:194;;:216::i;:::-;:237;;:290::i;:::-;8547:25;;;:318;;;8940:28;;;;8983:30;;;;;8547:318;;8940:28;;-1:-1:-1;8983:30:144;-1:-1:-1;6603:2429:144;-1:-1:-1;;;;;;;6603:2429:144:o;641:76:134:-;524:4;;641:76::o;3122:96:71:-;3180:7;3206:5;3210:1;3206;:5;:::i;:::-;3199:12;;3122:96;;;;;:::o;2755:::-;2813:7;2839:5;2843:1;2839;:5;:::i;1425:158:134:-;1486:7;;1522:5;1526:1;1522;:5;:::i;:::-;1506:21;-1:-1:-1;1547:28:134;1573:1;1547:21;1557:10;:1;524:4;1557:5;:10::i;:::-;1547:5;;:9;:21::i;:::-;:25;;:28::i;:::-;1540:35;1425:158;-1:-1:-1;;;;1425:158:134:o;1291:126::-;1352:7;1379:30;524:4;1379:21;1391:8;:1;1397;1391:5;:8::i;:::-;571:7;577:1;524:4;571:7;:::i;9597:729:144:-;9821:7;;9861:38;:15;9881:17;9861:19;:38::i;:::-;9841:58;;9916:9;9929:1;9916:14;9912:28;;9939:1;9932:8;;;;;9912:28;9953;9984:62;10020:25;9984:28;:17;:26;:28::i;:62::-;9953:93;;10059:26;10088:65;10122:30;10088:26;:15;:24;:26::i;:65::-;10059:94;;10166:25;10208:73;10260:20;:9;:18;:20::i;:::-;10208:44;:20;10233:18;10208:24;:44::i;:73::-;10166:115;9597:729;-1:-1:-1;;;;;;;;;9597:729:144:o;1026:333:133:-;1104:7;1123:10;;;:29;;-1:-1:-1;1137:15:133;;1123:29;1119:58;;;-1:-1:-1;1169:1:133;1162:8;;1119:58;1237:10;540:21;560:1;470:3;540:21;:::i;:::-;1201:32;;-1:-1:-1;;1201:32:133;:::i;:::-;1200:47;;;;:::i;:::-;1191:5;:56;;1249:35;;;;;;;;;;;;;-1:-1:-1;;;1249:35:133;;;1183:102;;;;;-1:-1:-1;;;1183:102:133;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;470:3:133;540:21;560:1;470:3;540:21;:::i;:::-;1300:18;1308:10;1300:5;:18;:::i;:::-;:33;;;;:::i;:::-;1299:55;;;;:::i;3465:96:71:-;3523:7;3549:5;3553:1;3549;:5;:::i;3850:96::-;3908:7;3934:5;3938:1;3934;:5;:::i;1771:107:134:-;1823:7;1850:20;:1;629:3;1850:5;:20::i;430:131:176:-;-1:-1:-1;;;;;505:31:176;;495:42;;485:70;;551:1;548;541:12;485:70;430:131;:::o;566:870::-;697:6;705;713;721;729;737;745;753;761;814:3;802:9;793:7;789:23;785:33;782:53;;;831:1;828;821:12;782:53;867:9;854:23;844:33;;927:2;916:9;912:18;899:32;940:31;965:5;940:31;:::i;:::-;990:5;-1:-1:-1;1047:2:176;1032:18;;1019:32;1060:33;1019:32;1060:33;:::i;:::-;566:870;;;;-1:-1:-1;1112:7:176;;1166:2;1151:18;;1138:32;;-1:-1:-1;1217:3:176;1202:19;;1189:33;;1269:3;1254:19;;1241:33;;-1:-1:-1;1321:3:176;1306:19;;1293:33;;-1:-1:-1;1373:3:176;1358:19;;1345:33;;-1:-1:-1;1425:3:176;1410:19;;;1397:33;;-1:-1:-1;566:870:176;-1:-1:-1;;566:870:176:o;1765:523::-;1869:6;1877;1885;1893;1901;1909;1962:3;1950:9;1941:7;1937:23;1933:33;1930:53;;;1979:1;1976;1969:12;1930:53;-1:-1:-1;;2002:23:176;;;2072:2;2057:18;;2044:32;;-1:-1:-1;2123:2:176;2108:18;;2095:32;;2174:2;2159:18;;2146:32;;-1:-1:-1;2225:3:176;2210:19;;2197:33;;-1:-1:-1;2277:3:176;2262:19;2249:33;;-1:-1:-1;1765:523:176;-1:-1:-1;1765:523:176:o;2501:184::-;2571:6;2624:2;2612:9;2603:7;2599:23;2595:32;2592:52;;;2640:1;2637;2630:12;2592:52;-1:-1:-1;2663:16:176;;2501:184;-1:-1:-1;2501:184:176:o;2690:251::-;2760:6;2813:2;2801:9;2792:7;2788:23;2784:32;2781:52;;;2829:1;2826;2819:12;2781:52;2861:9;2855:16;2880:31;2905:5;2880:31;:::i;:::-;2930:5;2690:251;-1:-1:-1;;;2690:251:176:o;2946:127::-;3007:10;3002:3;2998:20;2995:1;2988:31;3038:4;3035:1;3028:15;3062:4;3059:1;3052:15;3078:128;3145:9;;;3166:11;;;3163:37;;;3180:18;;:::i;3211:125::-;3276:9;;;3297:10;;;3294:36;;;3310:18;;:::i;3341:217::-;3381:1;3407;3397:132;;3451:10;3446:3;3442:20;3439:1;3432:31;3486:4;3483:1;3476:15;3514:4;3511:1;3504:15;3397:132;-1:-1:-1;3543:9:176;;3341:217::o;3563:548::-;3675:4;3704:2;3733;3722:9;3715:21;3765:6;3759:13;3808:6;3803:2;3792:9;3788:18;3781:34;3833:1;3843:140;3857:6;3854:1;3851:13;3843:140;;;3952:14;;;3948:23;;3942:30;3918:17;;;3937:2;3914:26;3907:66;3872:10;;3843:140;;;3847:3;4032:1;4027:2;4018:6;4007:9;4003:22;3999:31;3992:42;4102:2;4095;4091:7;4086:2;4078:6;4074:15;4070:29;4059:9;4055:45;4051:54;4043:62;;;;3563:548;;;;:::o;4116:168::-;4156:7;4222:1;4218;4214:6;4210:14;4207:1;4204:21;4199:1;4192:9;4185:17;4181:45;4178:71;;;4229:18;;:::i;:::-;-1:-1:-1;4269:9:176;;4116:168::o",
    "linkReferences": {},
    "immutableReferences": {
      "67153": [
        {
          "start": 483,
          "length": 32
        },
        {
          "start": 1279,
          "length": 32
        },
        {
          "start": 1359,
          "length": 32
        },
        {
          "start": 1655,
          "length": 32
        },
        {
          "start": 1775,
          "length": 32
        }
      ],
      "67156": [
        {
          "start": 232,
          "length": 32
        },
        {
          "start": 1323,
          "length": 32
        }
      ],
      "67159": [
        {
          "start": 271,
          "length": 32
        },
        {
          "start": 1029,
          "length": 32
        }
      ],
      "67161": [
        {
          "start": 519,
          "length": 32
        },
        {
          "start": 636,
          "length": 32
        },
        {
          "start": 1564,
          "length": 32
        },
        {
          "start": 1851,
          "length": 32
        }
      ],
      "67163": [
        {
          "start": 377,
          "length": 32
        },
        {
          "start": 669,
          "length": 32
        },
        {
          "start": 1597,
          "length": 32
        },
        {
          "start": 1813,
          "length": 32
        }
      ],
      "67165": [
        {
          "start": 339,
          "length": 32
        },
        {
          "start": 600,
          "length": 32
        },
        {
          "start": 1522,
          "length": 32
        }
      ],
      "67167": [
        {
          "start": 176,
          "length": 32
        },
        {
          "start": 1473,
          "length": 32
        },
        {
          "start": 1707,
          "length": 32
        }
      ],
      "67169": [
        {
          "start": 557,
          "length": 32
        },
        {
          "start": 1425,
          "length": 32
        }
      ]
    }
  },
  "methodIdentifiers": {
    "EXCESS_UTILIZATION_RATE()": "17319873",
    "OPTIMAL_UTILIZATION_RATE()": "a15f30ac",
    "addressProvider()": "2954018c",
    "baseVariableBorrowRate()": "b2589544",
    "calculateInterestRate(uint256,uint256,uint256,uint256,uint256,uint256)": "9b9c5b49",
    "calculateInterestRates(uint256,address,address,uint256,uint256,uint256,uint256,uint256,uint256)": "7d8a872d",
    "maxVariableBorrowRate()": "643d41f2",
    "stableRateSlope1()": "0bdf953f",
    "stableRateSlope2()": "ccab01a3",
    "variableRateSlope1()": "7b832f58",
    "variableRateSlope2()": "65614f81"
  },
  "rawMetadata": "{\"compiler\":{\"version\":\"0.8.16+commit.07a7930e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IAddressProvider\",\"name\":\"addressprovider_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"optimalUtilizationRate_\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseVariableBorrowRate_\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"variableRateSlope1_\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"variableRateSlope2_\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableRateSlope1_\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableRateSlope2_\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"EXCESS_UTILIZATION_RATE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPTIMAL_UTILIZATION_RATE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"addressProvider\",\"outputs\":[{\"internalType\":\"contract IAddressProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseVariableBorrowRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"availableLiquidity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalStableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalVariableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"averageStableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveFactor\",\"type\":\"uint256\"}],\"name\":\"calculateInterestRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"fToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidityAdded\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidityTaken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalStableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalVariableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"averageStableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveFactor\",\"type\":\"uint256\"}],\"name\":\"calculateInterestRates\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxVariableBorrowRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stableRateSlope1\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stableRateSlope2\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"variableRateSlope1\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"variableRateSlope2\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"FluidNFT*\",\"details\":\"The model of interest rate is based on 2 slopes, one before the `OPTIMAL_UTILIZATION_RATE` point of utilization and another from that one to 100%\",\"kind\":\"dev\",\"methods\":{\"calculateInterestRate(uint256,uint256,uint256,uint256,uint256,uint256)\":{\"details\":\"Calculates the interest rates depending on the asset reserve's state and configurations.\",\"params\":{\"availableLiquidity\":\"The liquidity available in the corresponding fToken\",\"averageStableBorrowRate\":\"The weighted average of all the stable rate loans\",\"reserveFactor\":\"The reserve portion of the interest that goes to the treasury of the market\",\"totalStableDebt\":\"The total borrowed from the reserve at a stable rate\",\"totalVariableDebt\":\"The total borrowed from the reserve at a variable rate\"},\"returns\":{\"_0\":\"The liquidity rate, the stable borrow rate and the variable borrow rate*\"}},\"calculateInterestRates(uint256,address,address,uint256,uint256,uint256,uint256,uint256,uint256)\":{\"details\":\"Calculates the interest rates depending on the reserve's state and configurations\",\"params\":{\"asset\":\"The address of the reserve asset\",\"fToken\":\"The address of the reserve fToken\",\"liquidityAdded\":\"The liquidity added during the operation\",\"liquidityTaken\":\"The liquidity taken during the operation\",\"reserveFactor\":\"The reserve portion of the interest that goes to the treasury of the market\",\"totalStableDebt\":\"The total borrowed from the reserve a stable rate\",\"totalVariableDebt\":\"The total borrowed from the reserve at a variable rate\"},\"returns\":{\"_0\":\"The liquidity rate, the stable borrow rate and the variable borrow rate*\"}}},\"stateVariables\":{\"EXCESS_UTILIZATION_RATE\":{\"details\":\"This constant represents the excess utilization rate above the optimal. It's always equal to 1-optimal utilization rate. Added as a constant here for gas optimizations. Expressed in ray*\"},\"OPTIMAL_UTILIZATION_RATE\":{\"details\":\"this constant represents the utilization rate at which the pool aims to obtain most competitive borrow rates. Expressed in ray*\"}},\"title\":\"InterestRateStrategy contract\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Implfements the calculation of the interest rates depending on the reserve state\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/protocol/risk/InterestRateStrategy.sol\":\"InterestRateStrategy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@chainlink/=lib/chainlink/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":chainlink/=lib/chainlink/integration-tests/contracts/ethereum/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol\":{\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2\",\"dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol\":{\"keccak256\":\"0x0f633a0223d9a1dcccfcf38a64c9de0874dfcbfac0c6941ccf074d63a2ce0e1e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://864a40efcffdf408044c332a5aa38ec5618ed7b4eecb8f65faf45671bd6cdc65\",\"dweb:/ipfs/QmQJquTMtc6fgm5JQzGdsGpA2fqBe3MHWEdt2qzaLySMdN\"]},\"src/interfaces/IAddressProvider.sol\":{\"keccak256\":\"0x6730abfcd8770e3279dad6137bf619ab98ee8b049e6dd85d2fbe87ba6224fde8\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://9b7d1588eab025b049f858ab2f329be7fec220198d956b9b61bf0b9bddc5761a\",\"dweb:/ipfs/QmTaFkYSUfWmbpsyE2TKC1QvP6eTDggZ72ZWodBhydqt5X\"]},\"src/interfaces/IInterestRateStrategy.sol\":{\"keccak256\":\"0x71f8b91324433fbdb16a38e5b7c214e7c30094167a7aaf77fcb045194a63af16\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://ce7a18b9c191a676ab68f5d59449c22bead494ccba0c2272e6c8bd606a1c0fd3\",\"dweb:/ipfs/QmZ4byVDnoAH67dSSXppkhTbvdNs7mmQadUnmreoeZVbSv\"]},\"src/interfaces/ILendingRateManager.sol\":{\"keccak256\":\"0x6078c32591ae3ced86c344ad2f228fbcc625f09cd59a8f7014355adb89dfcde0\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://fa594c0ceb1a0a085a6b077ac0729663f839f33f760eb8775ff1b3d25415e097\",\"dweb:/ipfs/QmXU74R73UDHiwvVaU9LRrC1tHaDq5eCerenKQtFX97UL6\"]},\"src/protocol/libraries/helpers/Errors.sol\":{\"keccak256\":\"0x490e76871922e89a13ba0bb88977be18c143fa9d0cd9afb033744a3d81479c52\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://1c409d4d1e1689d8d8f3c3e361198d20f3b6476608c5316d8e2d91f52373e8e3\",\"dweb:/ipfs/QmRZaYpxqjmBpbxb51KqswKYPSeCsU3ejbmk5E3MrMxJaM\"]},\"src/protocol/libraries/math/PercentageMath.sol\":{\"keccak256\":\"0xb84274fc3effba81036256cf7fde67b3dbfe86c4ffd0e062711a3270157952a2\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://3ecaf26e713b39d89ee21fb8bfefe55fe2fec4a2f5a2bffba7612f82182b7262\",\"dweb:/ipfs/QmZ6oXpNspwBEkiJEz1EhsU4EVBpG3anNjtzcycNEgAkfe\"]},\"src/protocol/libraries/math/WadRayMath.sol\":{\"keccak256\":\"0xb29e8edc0e0e6bfead27945357c9e4a66e0c11e58ff3b87ee68ed1b5ca416735\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://d1b4377995155f32bb6c3ba558875c617fa63601c597099d3460063ac2a15d93\",\"dweb:/ipfs/QmUvCE6Q2J62sMgQCCEbQauWSYJpMiu3QCgWa6mZnEmcK2\"]},\"src/protocol/risk/InterestRateStrategy.sol\":{\"keccak256\":\"0x15b2793f86d490b8d366e510d5a5c36f01450caf00bc748f1481a82ed02f7a0d\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://cbaedb9dd3f31336ec1c37844f19815a7d5c54bf271bbdaaea259f68ebfaf046\",\"dweb:/ipfs/QmUdVBDHqzL5AoNRMZxDyfAshSM315qgtrX4DBwidA8TdS\"]}},\"version\":1}",
  "metadata": {
    "compiler": {
      "version": "0.8.16+commit.07a7930e"
    },
    "language": "Solidity",
    "output": {
      "abi": [
        {
          "inputs": [
            {
              "internalType": "contract IAddressProvider",
              "name": "addressprovider_",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "optimalUtilizationRate_",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "baseVariableBorrowRate_",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "variableRateSlope1_",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "variableRateSlope2_",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stableRateSlope1_",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stableRateSlope2_",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "constructor"
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "EXCESS_UTILIZATION_RATE",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "OPTIMAL_UTILIZATION_RATE",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "addressProvider",
          "outputs": [
            {
              "internalType": "contract IAddressProvider",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "baseVariableBorrowRate",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "availableLiquidity",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalStableDebt",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalVariableDebt",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "averageStableBorrowRate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "reserveFactor",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "calculateInterestRate",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "asset",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "fToken",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "liquidityAdded",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "liquidityTaken",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalStableDebt",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalVariableDebt",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "averageStableBorrowRate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "reserveFactor",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "calculateInterestRates",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "maxVariableBorrowRate",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "stableRateSlope1",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "stableRateSlope2",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "variableRateSlope1",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "variableRateSlope2",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        }
      ],
      "devdoc": {
        "kind": "dev",
        "methods": {
          "calculateInterestRate(uint256,uint256,uint256,uint256,uint256,uint256)": {
            "details": "Calculates the interest rates depending on the asset reserve's state and configurations.",
            "params": {
              "availableLiquidity": "The liquidity available in the corresponding fToken",
              "averageStableBorrowRate": "The weighted average of all the stable rate loans",
              "reserveFactor": "The reserve portion of the interest that goes to the treasury of the market",
              "totalStableDebt": "The total borrowed from the reserve at a stable rate",
              "totalVariableDebt": "The total borrowed from the reserve at a variable rate"
            },
            "returns": {
              "_0": "The liquidity rate, the stable borrow rate and the variable borrow rate*"
            }
          },
          "calculateInterestRates(uint256,address,address,uint256,uint256,uint256,uint256,uint256,uint256)": {
            "details": "Calculates the interest rates depending on the reserve's state and configurations",
            "params": {
              "asset": "The address of the reserve asset",
              "fToken": "The address of the reserve fToken",
              "liquidityAdded": "The liquidity added during the operation",
              "liquidityTaken": "The liquidity taken during the operation",
              "reserveFactor": "The reserve portion of the interest that goes to the treasury of the market",
              "totalStableDebt": "The total borrowed from the reserve a stable rate",
              "totalVariableDebt": "The total borrowed from the reserve at a variable rate"
            },
            "returns": {
              "_0": "The liquidity rate, the stable borrow rate and the variable borrow rate*"
            }
          }
        },
        "version": 1
      },
      "userdoc": {
        "kind": "user",
        "methods": {},
        "version": 1
      }
    },
    "settings": {
      "remappings": [
        ":@chainlink/=lib/chainlink/",
        ":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
        ":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
        ":chainlink/=lib/chainlink/integration-tests/contracts/ethereum/src/",
        ":ds-test/=lib/forge-std/lib/ds-test/src/",
        ":forge-std/=lib/forge-std/src/"
      ],
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "metadata": {
        "bytecodeHash": "ipfs"
      },
      "compilationTarget": {
        "src/protocol/risk/InterestRateStrategy.sol": "InterestRateStrategy"
      },
      "libraries": {}
    },
    "sources": {
      "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": {
        "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff",
        "urls": [
          "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2",
          "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol": {
        "keccak256": "0x0f633a0223d9a1dcccfcf38a64c9de0874dfcbfac0c6941ccf074d63a2ce0e1e",
        "urls": [
          "bzz-raw://864a40efcffdf408044c332a5aa38ec5618ed7b4eecb8f65faf45671bd6cdc65",
          "dweb:/ipfs/QmQJquTMtc6fgm5JQzGdsGpA2fqBe3MHWEdt2qzaLySMdN"
        ],
        "license": "MIT"
      },
      "src/interfaces/IAddressProvider.sol": {
        "keccak256": "0x6730abfcd8770e3279dad6137bf619ab98ee8b049e6dd85d2fbe87ba6224fde8",
        "urls": [
          "bzz-raw://9b7d1588eab025b049f858ab2f329be7fec220198d956b9b61bf0b9bddc5761a",
          "dweb:/ipfs/QmTaFkYSUfWmbpsyE2TKC1QvP6eTDggZ72ZWodBhydqt5X"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/IInterestRateStrategy.sol": {
        "keccak256": "0x71f8b91324433fbdb16a38e5b7c214e7c30094167a7aaf77fcb045194a63af16",
        "urls": [
          "bzz-raw://ce7a18b9c191a676ab68f5d59449c22bead494ccba0c2272e6c8bd606a1c0fd3",
          "dweb:/ipfs/QmZ4byVDnoAH67dSSXppkhTbvdNs7mmQadUnmreoeZVbSv"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/ILendingRateManager.sol": {
        "keccak256": "0x6078c32591ae3ced86c344ad2f228fbcc625f09cd59a8f7014355adb89dfcde0",
        "urls": [
          "bzz-raw://fa594c0ceb1a0a085a6b077ac0729663f839f33f760eb8775ff1b3d25415e097",
          "dweb:/ipfs/QmXU74R73UDHiwvVaU9LRrC1tHaDq5eCerenKQtFX97UL6"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/helpers/Errors.sol": {
        "keccak256": "0x490e76871922e89a13ba0bb88977be18c143fa9d0cd9afb033744a3d81479c52",
        "urls": [
          "bzz-raw://1c409d4d1e1689d8d8f3c3e361198d20f3b6476608c5316d8e2d91f52373e8e3",
          "dweb:/ipfs/QmRZaYpxqjmBpbxb51KqswKYPSeCsU3ejbmk5E3MrMxJaM"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/math/PercentageMath.sol": {
        "keccak256": "0xb84274fc3effba81036256cf7fde67b3dbfe86c4ffd0e062711a3270157952a2",
        "urls": [
          "bzz-raw://3ecaf26e713b39d89ee21fb8bfefe55fe2fec4a2f5a2bffba7612f82182b7262",
          "dweb:/ipfs/QmZ6oXpNspwBEkiJEz1EhsU4EVBpG3anNjtzcycNEgAkfe"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/math/WadRayMath.sol": {
        "keccak256": "0xb29e8edc0e0e6bfead27945357c9e4a66e0c11e58ff3b87ee68ed1b5ca416735",
        "urls": [
          "bzz-raw://d1b4377995155f32bb6c3ba558875c617fa63601c597099d3460063ac2a15d93",
          "dweb:/ipfs/QmUvCE6Q2J62sMgQCCEbQauWSYJpMiu3QCgWa6mZnEmcK2"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/risk/InterestRateStrategy.sol": {
        "keccak256": "0x15b2793f86d490b8d366e510d5a5c36f01450caf00bc748f1481a82ed02f7a0d",
        "urls": [
          "bzz-raw://cbaedb9dd3f31336ec1c37844f19815a7d5c54bf271bbdaaea259f68ebfaf046",
          "dweb:/ipfs/QmUdVBDHqzL5AoNRMZxDyfAshSM315qgtrX4DBwidA8TdS"
        ],
        "license": "AGPL-3.0"
      }
    },
    "version": 1
  },
  "ast": {
    "absolutePath": "src/protocol/risk/InterestRateStrategy.sol",
    "id": 67613,
    "exportedSymbols": {
      "IAddressProvider": [
        45718
      ],
      "IERC20Upgradeable": [
        27189
      ],
      "IInterestRateStrategy": [
        46846
      ],
      "ILendingRateManager": [
        47434
      ],
      "InterestRateStrategy": [
        67612
      ],
      "PercentageMath": [
        62719
      ],
      "SafeMath": [
        36719
      ],
      "WadRayMath": [
        62965
      ]
    },
    "nodeType": "SourceUnit",
    "src": "38:10291:144",
    "nodes": [
      {
        "id": 67124,
        "nodeType": "PragmaDirective",
        "src": "38:23:144",
        "nodes": [],
        "literals": [
          "solidity",
          "0.8",
          ".16"
        ]
      },
      {
        "id": 67126,
        "nodeType": "ImportDirective",
        "src": "65:83:144",
        "nodes": [],
        "absolutePath": "src/interfaces/IInterestRateStrategy.sol",
        "file": "../../interfaces/IInterestRateStrategy.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 67613,
        "sourceUnit": 46847,
        "symbolAliases": [
          {
            "foreign": {
              "id": 67125,
              "name": "IInterestRateStrategy",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 46846,
              "src": "74:21:144",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 67128,
        "nodeType": "ImportDirective",
        "src": "150:79:144",
        "nodes": [],
        "absolutePath": "src/interfaces/ILendingRateManager.sol",
        "file": "../../interfaces/ILendingRateManager.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 67613,
        "sourceUnit": 47435,
        "symbolAliases": [
          {
            "foreign": {
              "id": 67127,
              "name": "ILendingRateManager",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 47434,
              "src": "159:19:144",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 67130,
        "nodeType": "ImportDirective",
        "src": "231:73:144",
        "nodes": [],
        "absolutePath": "src/interfaces/IAddressProvider.sol",
        "file": "../../interfaces/IAddressProvider.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 67613,
        "sourceUnit": 45719,
        "symbolAliases": [
          {
            "foreign": {
              "id": 67129,
              "name": "IAddressProvider",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 45718,
              "src": "240:16:144",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 67132,
        "nodeType": "ImportDirective",
        "src": "308:70:144",
        "nodes": [],
        "absolutePath": "src/protocol/libraries/math/PercentageMath.sol",
        "file": "../libraries/math/PercentageMath.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 67613,
        "sourceUnit": 62720,
        "symbolAliases": [
          {
            "foreign": {
              "id": 67131,
              "name": "PercentageMath",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 62719,
              "src": "317:14:144",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 67134,
        "nodeType": "ImportDirective",
        "src": "380:62:144",
        "nodes": [],
        "absolutePath": "src/protocol/libraries/math/WadRayMath.sol",
        "file": "../libraries/math/WadRayMath.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 67613,
        "sourceUnit": 62966,
        "symbolAliases": [
          {
            "foreign": {
              "id": 67133,
              "name": "WadRayMath",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 62965,
              "src": "389:10:144",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 67136,
        "nodeType": "ImportDirective",
        "src": "446:106:144",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 67613,
        "sourceUnit": 27190,
        "symbolAliases": [
          {
            "foreign": {
              "id": 67135,
              "name": "IERC20Upgradeable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 27189,
              "src": "455:17:144",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 67138,
        "nodeType": "ImportDirective",
        "src": "554:75:144",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol",
        "file": "@openzeppelin/contracts/utils/math/SafeMath.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 67613,
        "sourceUnit": 36720,
        "symbolAliases": [
          {
            "foreign": {
              "id": 67137,
              "name": "SafeMath",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 36719,
              "src": "563:8:144",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 67612,
        "nodeType": "ContractDefinition",
        "src": "958:9371:144",
        "nodes": [
          {
            "id": 67144,
            "nodeType": "UsingForDirective",
            "src": "1020:29:144",
            "nodes": [],
            "global": false,
            "libraryName": {
              "id": 67142,
              "name": "WadRayMath",
              "nameLocations": [
                "1026:10:144"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 62965,
              "src": "1026:10:144"
            },
            "typeName": {
              "id": 67143,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1041:7:144",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 67147,
            "nodeType": "UsingForDirective",
            "src": "1055:27:144",
            "nodes": [],
            "global": false,
            "libraryName": {
              "id": 67145,
              "name": "SafeMath",
              "nameLocations": [
                "1061:8:144"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 36719,
              "src": "1061:8:144"
            },
            "typeName": {
              "id": 67146,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1074:7:144",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 67150,
            "nodeType": "UsingForDirective",
            "src": "1088:33:144",
            "nodes": [],
            "global": false,
            "libraryName": {
              "id": 67148,
              "name": "PercentageMath",
              "nameLocations": [
                "1094:14:144"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 62719,
              "src": "1094:14:144"
            },
            "typeName": {
              "id": 67149,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1113:7:144",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 67153,
            "nodeType": "VariableDeclaration",
            "src": "1296:49:144",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 67151,
              "nodeType": "StructuredDocumentation",
              "src": "1129:161:144",
              "text": " @dev this constant represents the utilization rate at which the pool aims to obtain most competitive borrow rates.\n Expressed in ray*"
            },
            "functionSelector": "a15f30ac",
            "mutability": "immutable",
            "name": "OPTIMAL_UTILIZATION_RATE",
            "nameLocation": "1321:24:144",
            "scope": 67612,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 67152,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1296:7:144",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "id": 67156,
            "nodeType": "VariableDeclaration",
            "src": "1590:48:144",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 67154,
              "nodeType": "StructuredDocumentation",
              "src": "1354:228:144",
              "text": " @dev This constant represents the excess utilization rate above the optimal. It's always equal to\n 1-optimal utilization rate. Added as a constant here for gas optimizations.\n Expressed in ray*"
            },
            "functionSelector": "17319873",
            "mutability": "immutable",
            "name": "EXCESS_UTILIZATION_RATE",
            "nameLocation": "1615:23:144",
            "scope": 67612,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 67155,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1590:7:144",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "id": 67159,
            "nodeType": "VariableDeclaration",
            "src": "1647:49:144",
            "nodes": [],
            "constant": false,
            "functionSelector": "2954018c",
            "mutability": "immutable",
            "name": "addressProvider",
            "nameLocation": "1681:15:144",
            "scope": 67612,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IAddressProvider_$45718",
              "typeString": "contract IAddressProvider"
            },
            "typeName": {
              "id": 67158,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 67157,
                "name": "IAddressProvider",
                "nameLocations": [
                  "1647:16:144"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 45718,
                "src": "1647:16:144"
              },
              "referencedDeclaration": 45718,
              "src": "1647:16:144",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IAddressProvider_$45718",
                "typeString": "contract IAddressProvider"
              }
            },
            "visibility": "public"
          },
          {
            "id": 67161,
            "nodeType": "VariableDeclaration",
            "src": "1783:50:144",
            "nodes": [],
            "constant": false,
            "mutability": "immutable",
            "name": "_baseVariableBorrowRate",
            "nameLocation": "1810:23:144",
            "scope": 67612,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 67160,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1783:7:144",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 67163,
            "nodeType": "VariableDeclaration",
            "src": "1963:46:144",
            "nodes": [],
            "constant": false,
            "mutability": "immutable",
            "name": "_variableRateSlope1",
            "nameLocation": "1990:19:144",
            "scope": 67612,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 67162,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1963:7:144",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 67165,
            "nodeType": "VariableDeclaration",
            "src": "2130:46:144",
            "nodes": [],
            "constant": false,
            "mutability": "immutable",
            "name": "_variableRateSlope2",
            "nameLocation": "2157:19:144",
            "scope": 67612,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 67164,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "2130:7:144",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 67167,
            "nodeType": "VariableDeclaration",
            "src": "2304:44:144",
            "nodes": [],
            "constant": false,
            "mutability": "immutable",
            "name": "_stableRateSlope1",
            "nameLocation": "2331:17:144",
            "scope": 67612,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 67166,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "2304:7:144",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 67169,
            "nodeType": "VariableDeclaration",
            "src": "2467:44:144",
            "nodes": [],
            "constant": false,
            "mutability": "immutable",
            "name": "_stableRateSlope2",
            "nameLocation": "2494:17:144",
            "scope": 67612,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 67168,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "2467:7:144",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 67225,
            "nodeType": "FunctionDefinition",
            "src": "2520:751:144",
            "nodes": [],
            "body": {
              "id": 67224,
              "nodeType": "Block",
              "src": "2815:456:144",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 67189,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 67187,
                      "name": "OPTIMAL_UTILIZATION_RATE",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67153,
                      "src": "2826:24:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 67188,
                      "name": "optimalUtilizationRate_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67174,
                      "src": "2853:23:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2826:50:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 67190,
                  "nodeType": "ExpressionStatement",
                  "src": "2826:50:144"
                },
                {
                  "expression": {
                    "id": 67198,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 67191,
                      "name": "EXCESS_UTILIZATION_RATE",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67156,
                      "src": "2887:23:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 67196,
                          "name": "optimalUtilizationRate_",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 67174,
                          "src": "2934:23:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 67192,
                              "name": "WadRayMath",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62965,
                              "src": "2913:10:144",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_WadRayMath_$62965_$",
                                "typeString": "type(library WadRayMath)"
                              }
                            },
                            "id": 67193,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "2924:3:144",
                            "memberName": "ray",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 62753,
                            "src": "2913:14:144",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$__$returns$_t_uint256_$",
                              "typeString": "function () pure returns (uint256)"
                            }
                          },
                          "id": 67194,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2913:16:144",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 67195,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "2930:3:144",
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 36598,
                        "src": "2913:20:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 67197,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2913:45:144",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2887:71:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 67199,
                  "nodeType": "ExpressionStatement",
                  "src": "2887:71:144"
                },
                {
                  "expression": {
                    "id": 67202,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 67200,
                      "name": "addressProvider",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67159,
                      "src": "2969:15:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAddressProvider_$45718",
                        "typeString": "contract IAddressProvider"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 67201,
                      "name": "addressprovider_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67172,
                      "src": "2987:16:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAddressProvider_$45718",
                        "typeString": "contract IAddressProvider"
                      }
                    },
                    "src": "2969:34:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAddressProvider_$45718",
                      "typeString": "contract IAddressProvider"
                    }
                  },
                  "id": 67203,
                  "nodeType": "ExpressionStatement",
                  "src": "2969:34:144"
                },
                {
                  "expression": {
                    "id": 67206,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 67204,
                      "name": "_baseVariableBorrowRate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67161,
                      "src": "3014:23:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 67205,
                      "name": "baseVariableBorrowRate_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67176,
                      "src": "3040:23:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3014:49:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 67207,
                  "nodeType": "ExpressionStatement",
                  "src": "3014:49:144"
                },
                {
                  "expression": {
                    "id": 67210,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 67208,
                      "name": "_variableRateSlope1",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67163,
                      "src": "3074:19:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 67209,
                      "name": "variableRateSlope1_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67178,
                      "src": "3096:19:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3074:41:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 67211,
                  "nodeType": "ExpressionStatement",
                  "src": "3074:41:144"
                },
                {
                  "expression": {
                    "id": 67214,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 67212,
                      "name": "_variableRateSlope2",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67165,
                      "src": "3126:19:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 67213,
                      "name": "variableRateSlope2_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67180,
                      "src": "3148:19:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3126:41:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 67215,
                  "nodeType": "ExpressionStatement",
                  "src": "3126:41:144"
                },
                {
                  "expression": {
                    "id": 67218,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 67216,
                      "name": "_stableRateSlope1",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67167,
                      "src": "3178:17:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 67217,
                      "name": "stableRateSlope1_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67182,
                      "src": "3198:17:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3178:37:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 67219,
                  "nodeType": "ExpressionStatement",
                  "src": "3178:37:144"
                },
                {
                  "expression": {
                    "id": 67222,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 67220,
                      "name": "_stableRateSlope2",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67169,
                      "src": "3226:17:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 67221,
                      "name": "stableRateSlope2_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67184,
                      "src": "3246:17:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3226:37:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 67223,
                  "nodeType": "ExpressionStatement",
                  "src": "3226:37:144"
                }
              ]
            },
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "parameters": {
              "id": 67185,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67172,
                  "mutability": "mutable",
                  "name": "addressprovider_",
                  "nameLocation": "2559:16:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67225,
                  "src": "2542:33:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IAddressProvider_$45718",
                    "typeString": "contract IAddressProvider"
                  },
                  "typeName": {
                    "id": 67171,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 67170,
                      "name": "IAddressProvider",
                      "nameLocations": [
                        "2542:16:144"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 45718,
                      "src": "2542:16:144"
                    },
                    "referencedDeclaration": 45718,
                    "src": "2542:16:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAddressProvider_$45718",
                      "typeString": "contract IAddressProvider"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67174,
                  "mutability": "mutable",
                  "name": "optimalUtilizationRate_",
                  "nameLocation": "2594:23:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67225,
                  "src": "2586:31:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67173,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2586:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67176,
                  "mutability": "mutable",
                  "name": "baseVariableBorrowRate_",
                  "nameLocation": "2636:23:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67225,
                  "src": "2628:31:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67175,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2628:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67178,
                  "mutability": "mutable",
                  "name": "variableRateSlope1_",
                  "nameLocation": "2678:19:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67225,
                  "src": "2670:27:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67177,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2670:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67180,
                  "mutability": "mutable",
                  "name": "variableRateSlope2_",
                  "nameLocation": "2716:19:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67225,
                  "src": "2708:27:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67179,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2708:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67182,
                  "mutability": "mutable",
                  "name": "stableRateSlope1_",
                  "nameLocation": "2754:17:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67225,
                  "src": "2746:25:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67181,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2746:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67184,
                  "mutability": "mutable",
                  "name": "stableRateSlope2_",
                  "nameLocation": "2790:17:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67225,
                  "src": "2782:25:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67183,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2782:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2531:283:144"
            },
            "returnParameters": {
              "id": 67186,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2815:0:144"
            },
            "scope": 67612,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 67233,
            "nodeType": "FunctionDefinition",
            "src": "3279:107:144",
            "nodes": [],
            "body": {
              "id": 67232,
              "nodeType": "Block",
              "src": "3341:45:144",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 67230,
                    "name": "_variableRateSlope1",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 67163,
                    "src": "3359:19:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 67229,
                  "id": 67231,
                  "nodeType": "Return",
                  "src": "3352:26:144"
                }
              ]
            },
            "baseFunctions": [
              46772
            ],
            "functionSelector": "7b832f58",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "variableRateSlope1",
            "nameLocation": "3288:18:144",
            "parameters": {
              "id": 67226,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3306:2:144"
            },
            "returnParameters": {
              "id": 67229,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67228,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67233,
                  "src": "3332:7:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67227,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3332:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3331:9:144"
            },
            "scope": 67612,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 67241,
            "nodeType": "FunctionDefinition",
            "src": "3394:107:144",
            "nodes": [],
            "body": {
              "id": 67240,
              "nodeType": "Block",
              "src": "3456:45:144",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 67238,
                    "name": "_variableRateSlope2",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 67165,
                    "src": "3474:19:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 67237,
                  "id": 67239,
                  "nodeType": "Return",
                  "src": "3467:26:144"
                }
              ]
            },
            "baseFunctions": [
              46777
            ],
            "functionSelector": "65614f81",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "variableRateSlope2",
            "nameLocation": "3403:18:144",
            "parameters": {
              "id": 67234,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3421:2:144"
            },
            "returnParameters": {
              "id": 67237,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67236,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67241,
                  "src": "3447:7:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67235,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3447:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3446:9:144"
            },
            "scope": 67612,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 67249,
            "nodeType": "FunctionDefinition",
            "src": "3509:103:144",
            "nodes": [],
            "body": {
              "id": 67248,
              "nodeType": "Block",
              "src": "3569:43:144",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 67246,
                    "name": "_stableRateSlope1",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 67167,
                    "src": "3587:17:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 67245,
                  "id": 67247,
                  "nodeType": "Return",
                  "src": "3580:24:144"
                }
              ]
            },
            "baseFunctions": [
              46782
            ],
            "functionSelector": "0bdf953f",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "stableRateSlope1",
            "nameLocation": "3518:16:144",
            "parameters": {
              "id": 67242,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3534:2:144"
            },
            "returnParameters": {
              "id": 67245,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67244,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67249,
                  "src": "3560:7:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67243,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3560:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3559:9:144"
            },
            "scope": 67612,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 67257,
            "nodeType": "FunctionDefinition",
            "src": "3620:103:144",
            "nodes": [],
            "body": {
              "id": 67256,
              "nodeType": "Block",
              "src": "3680:43:144",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 67254,
                    "name": "_stableRateSlope2",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 67169,
                    "src": "3698:17:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 67253,
                  "id": 67255,
                  "nodeType": "Return",
                  "src": "3691:24:144"
                }
              ]
            },
            "baseFunctions": [
              46787
            ],
            "functionSelector": "ccab01a3",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "stableRateSlope2",
            "nameLocation": "3629:16:144",
            "parameters": {
              "id": 67250,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3645:2:144"
            },
            "returnParameters": {
              "id": 67253,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67252,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67257,
                  "src": "3671:7:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67251,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3671:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3670:9:144"
            },
            "scope": 67612,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 67266,
            "nodeType": "FunctionDefinition",
            "src": "3731:124:144",
            "nodes": [],
            "body": {
              "id": 67265,
              "nodeType": "Block",
              "src": "3806:49:144",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 67263,
                    "name": "_baseVariableBorrowRate",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 67161,
                    "src": "3824:23:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 67262,
                  "id": 67264,
                  "nodeType": "Return",
                  "src": "3817:30:144"
                }
              ]
            },
            "baseFunctions": [
              46792
            ],
            "functionSelector": "b2589544",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "baseVariableBorrowRate",
            "nameLocation": "3740:22:144",
            "overrides": {
              "id": 67259,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3779:8:144"
            },
            "parameters": {
              "id": 67258,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3762:2:144"
            },
            "returnParameters": {
              "id": 67262,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67261,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67266,
                  "src": "3797:7:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67260,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3797:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3796:9:144"
            },
            "scope": 67612,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 67281,
            "nodeType": "FunctionDefinition",
            "src": "3863:173:144",
            "nodes": [],
            "body": {
              "id": 67280,
              "nodeType": "Block",
              "src": "3937:99:144",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 67277,
                        "name": "_variableRateSlope2",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67165,
                        "src": "4008:19:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 67274,
                            "name": "_variableRateSlope1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 67163,
                            "src": "3983:19:144",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 67272,
                            "name": "_baseVariableBorrowRate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 67161,
                            "src": "3955:23:144",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 67273,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "3979:3:144",
                          "memberName": "add",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 36583,
                          "src": "3955:27:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 67275,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3955:48:144",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 67276,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4004:3:144",
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 36583,
                      "src": "3955:52:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 67278,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3955:73:144",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 67271,
                  "id": 67279,
                  "nodeType": "Return",
                  "src": "3948:80:144"
                }
              ]
            },
            "baseFunctions": [
              46797
            ],
            "functionSelector": "643d41f2",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "maxVariableBorrowRate",
            "nameLocation": "3872:21:144",
            "overrides": {
              "id": 67268,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3910:8:144"
            },
            "parameters": {
              "id": 67267,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3893:2:144"
            },
            "returnParameters": {
              "id": 67271,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67270,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67281,
                  "src": "3928:7:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67269,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3928:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3927:9:144"
            },
            "scope": 67612,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 67339,
            "nodeType": "FunctionDefinition",
            "src": "4772:925:144",
            "nodes": [],
            "body": {
              "id": 67338,
              "nodeType": "Block",
              "src": "5248:449:144",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    67311
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 67311,
                      "mutability": "mutable",
                      "name": "availableLiquidity",
                      "nameLocation": "5267:18:144",
                      "nodeType": "VariableDeclaration",
                      "scope": 67338,
                      "src": "5259:26:144",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 67310,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5259:7:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 67318,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 67316,
                        "name": "fToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67288,
                        "src": "5323:6:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 67313,
                            "name": "asset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 67286,
                            "src": "5306:5:144",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 67312,
                          "name": "IERC20Upgradeable",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27189,
                          "src": "5288:17:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC20Upgradeable_$27189_$",
                            "typeString": "type(contract IERC20Upgradeable)"
                          }
                        },
                        "id": 67314,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5288:24:144",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Upgradeable_$27189",
                          "typeString": "contract IERC20Upgradeable"
                        }
                      },
                      "id": 67315,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5313:9:144",
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27146,
                      "src": "5288:34:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 67317,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5288:42:144",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5259:71:144"
                },
                {
                  "expression": {
                    "id": 67327,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 67319,
                      "name": "availableLiquidity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67311,
                      "src": "5373:18:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 67325,
                          "name": "liquidityTaken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 67292,
                          "src": "5437:14:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "arguments": [
                            {
                              "id": 67322,
                              "name": "liquidityAdded",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 67290,
                              "src": "5417:14:144",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 67320,
                              "name": "availableLiquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 67311,
                              "src": "5394:18:144",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 67321,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "5413:3:144",
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 36583,
                            "src": "5394:22:144",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 67323,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5394:38:144",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 67324,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "5433:3:144",
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 36598,
                        "src": "5394:42:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 67326,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5394:58:144",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5373:79:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 67328,
                  "nodeType": "ExpressionStatement",
                  "src": "5373:79:144"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 67330,
                        "name": "reserveId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67284,
                        "src": "5508:9:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 67331,
                        "name": "availableLiquidity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67311,
                        "src": "5532:18:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 67332,
                        "name": "totalStableDebt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67294,
                        "src": "5565:15:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 67333,
                        "name": "totalVariableDebt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67296,
                        "src": "5595:17:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 67334,
                        "name": "averageStableBorrowRate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67298,
                        "src": "5627:23:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 67335,
                        "name": "reserveFactor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67300,
                        "src": "5665:13:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 67329,
                      "name": "calculateInterestRate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67551,
                      "src": "5472:21:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256,uint256,uint256,uint256) view returns (uint256,uint256,uint256)"
                      }
                    },
                    "id": 67336,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5472:217:144",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 67309,
                  "id": 67337,
                  "nodeType": "Return",
                  "src": "5465:224:144"
                }
              ]
            },
            "baseFunctions": [
              46845
            ],
            "documentation": {
              "id": 67282,
              "nodeType": "StructuredDocumentation",
              "src": "4044:722:144",
              "text": " @dev Calculates the interest rates depending on the reserve's state and configurations\n @param asset The address of the reserve asset\n @param fToken The address of the reserve fToken\n @param liquidityAdded The liquidity added during the operation\n @param liquidityTaken The liquidity taken during the operation\n @param totalStableDebt The total borrowed from the reserve a stable rate\n @param totalVariableDebt The total borrowed from the reserve at a variable rate\n @param reserveFactor The reserve portion of the interest that goes to the treasury of the market\n @return The liquidity rate, the stable borrow rate and the variable borrow rate*"
            },
            "functionSelector": "7d8a872d",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "calculateInterestRates",
            "nameLocation": "4781:22:144",
            "overrides": {
              "id": 67302,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5139:8:144"
            },
            "parameters": {
              "id": 67301,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67284,
                  "mutability": "mutable",
                  "name": "reserveId",
                  "nameLocation": "4822:9:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67339,
                  "src": "4814:17:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67283,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4814:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67286,
                  "mutability": "mutable",
                  "name": "asset",
                  "nameLocation": "4850:5:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67339,
                  "src": "4842:13:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 67285,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4842:7:144",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67288,
                  "mutability": "mutable",
                  "name": "fToken",
                  "nameLocation": "4874:6:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67339,
                  "src": "4866:14:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 67287,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4866:7:144",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67290,
                  "mutability": "mutable",
                  "name": "liquidityAdded",
                  "nameLocation": "4899:14:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67339,
                  "src": "4891:22:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67289,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4891:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67292,
                  "mutability": "mutable",
                  "name": "liquidityTaken",
                  "nameLocation": "4932:14:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67339,
                  "src": "4924:22:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67291,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4924:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67294,
                  "mutability": "mutable",
                  "name": "totalStableDebt",
                  "nameLocation": "4965:15:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67339,
                  "src": "4957:23:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67293,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4957:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67296,
                  "mutability": "mutable",
                  "name": "totalVariableDebt",
                  "nameLocation": "4999:17:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67339,
                  "src": "4991:25:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67295,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4991:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67298,
                  "mutability": "mutable",
                  "name": "averageStableBorrowRate",
                  "nameLocation": "5035:23:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67339,
                  "src": "5027:31:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67297,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5027:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67300,
                  "mutability": "mutable",
                  "name": "reserveFactor",
                  "nameLocation": "5077:13:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67339,
                  "src": "5069:21:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67299,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5069:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4803:294:144"
            },
            "returnParameters": {
              "id": 67309,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67304,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67339,
                  "src": "5180:7:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67303,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5180:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67306,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67339,
                  "src": "5202:7:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67305,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5202:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67308,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67339,
                  "src": "5224:7:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67307,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5224:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5165:77:144"
            },
            "scope": 67612,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 67350,
            "nodeType": "StructDefinition",
            "src": "5705:229:144",
            "nodes": [],
            "canonicalName": "InterestRateStrategy.CalcInterestRatesLocalVars",
            "members": [
              {
                "constant": false,
                "id": 67341,
                "mutability": "mutable",
                "name": "totalDebt",
                "nameLocation": "5758:9:144",
                "nodeType": "VariableDeclaration",
                "scope": 67350,
                "src": "5750:17:144",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 67340,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "5750:7:144",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 67343,
                "mutability": "mutable",
                "name": "currentVariableBorrowRate",
                "nameLocation": "5786:25:144",
                "nodeType": "VariableDeclaration",
                "scope": 67350,
                "src": "5778:33:144",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 67342,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "5778:7:144",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 67345,
                "mutability": "mutable",
                "name": "currentStableBorrowRate",
                "nameLocation": "5830:23:144",
                "nodeType": "VariableDeclaration",
                "scope": 67350,
                "src": "5822:31:144",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 67344,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "5822:7:144",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 67347,
                "mutability": "mutable",
                "name": "currentLiquidityRate",
                "nameLocation": "5872:20:144",
                "nodeType": "VariableDeclaration",
                "scope": 67350,
                "src": "5864:28:144",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 67346,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "5864:7:144",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 67349,
                "mutability": "mutable",
                "name": "utilizationRate",
                "nameLocation": "5911:15:144",
                "nodeType": "VariableDeclaration",
                "scope": 67350,
                "src": "5903:23:144",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 67348,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "5903:7:144",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "CalcInterestRatesLocalVars",
            "nameLocation": "5712:26:144",
            "scope": 67612,
            "visibility": "public"
          },
          {
            "id": 67551,
            "nodeType": "FunctionDefinition",
            "src": "6603:2429:144",
            "nodes": [],
            "body": {
              "id": 67550,
              "nodeType": "Block",
              "src": "6998:2034:144",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    67375
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 67375,
                      "mutability": "mutable",
                      "name": "vars",
                      "nameLocation": "7043:4:144",
                      "nodeType": "VariableDeclaration",
                      "scope": 67550,
                      "src": "7009:38:144",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                        "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars"
                      },
                      "typeName": {
                        "id": 67374,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 67373,
                          "name": "CalcInterestRatesLocalVars",
                          "nameLocations": [
                            "7009:26:144"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 67350,
                          "src": "7009:26:144"
                        },
                        "referencedDeclaration": 67350,
                        "src": "7009:26:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_storage_ptr",
                          "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 67376,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7009:38:144"
                },
                {
                  "expression": {
                    "id": 67384,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 67377,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67375,
                        "src": "7060:4:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                          "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                        }
                      },
                      "id": 67379,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "7065:9:144",
                      "memberName": "totalDebt",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 67341,
                      "src": "7060:14:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 67382,
                          "name": "totalVariableDebt",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 67359,
                          "src": "7097:17:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "id": 67380,
                          "name": "totalStableDebt",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 67357,
                          "src": "7077:15:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 67381,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "7093:3:144",
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 36583,
                        "src": "7077:19:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 67383,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7077:38:144",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7060:55:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 67385,
                  "nodeType": "ExpressionStatement",
                  "src": "7060:55:144"
                },
                {
                  "expression": {
                    "id": 67390,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 67386,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67375,
                        "src": "7126:4:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                          "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                        }
                      },
                      "id": 67388,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "7131:23:144",
                      "memberName": "currentStableBorrowRate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 67345,
                      "src": "7126:28:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "30",
                      "id": 67389,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7157:1:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7126:32:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 67391,
                  "nodeType": "ExpressionStatement",
                  "src": "7126:32:144"
                },
                {
                  "expression": {
                    "id": 67396,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 67392,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67375,
                        "src": "7169:4:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                          "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                        }
                      },
                      "id": 67394,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "7174:25:144",
                      "memberName": "currentVariableBorrowRate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 67343,
                      "src": "7169:30:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "30",
                      "id": 67395,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7202:1:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7169:34:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 67397,
                  "nodeType": "ExpressionStatement",
                  "src": "7169:34:144"
                },
                {
                  "expression": {
                    "id": 67402,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 67398,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67375,
                        "src": "7214:4:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                          "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                        }
                      },
                      "id": 67400,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "7219:20:144",
                      "memberName": "currentLiquidityRate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 67347,
                      "src": "7214:25:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "30",
                      "id": 67401,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7242:1:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7214:29:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 67403,
                  "nodeType": "ExpressionStatement",
                  "src": "7214:29:144"
                },
                {
                  "expression": {
                    "id": 67422,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 67404,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67375,
                        "src": "7256:4:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                          "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                        }
                      },
                      "id": 67406,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "7261:15:144",
                      "memberName": "utilizationRate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 67349,
                      "src": "7256:20:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "condition": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 67410,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 67407,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 67375,
                            "src": "7279:4:144",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                              "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                            }
                          },
                          "id": 67408,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "7284:9:144",
                          "memberName": "totalDebt",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 67341,
                          "src": "7279:14:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 67409,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7297:1:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "7279:19:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseExpression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 67417,
                                  "name": "vars",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 67375,
                                  "src": "7378:4:144",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                                    "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                                  }
                                },
                                "id": 67418,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "7383:9:144",
                                "memberName": "totalDebt",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 67341,
                                "src": "7378:14:144",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "id": 67415,
                                "name": "availableLiquidity",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 67355,
                                "src": "7355:18:144",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 67416,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "7374:3:144",
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 36583,
                              "src": "7355:22:144",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 67419,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7355:38:144",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "expression": {
                              "id": 67412,
                              "name": "vars",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 67375,
                              "src": "7333:4:144",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                                "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                              }
                            },
                            "id": 67413,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "7338:9:144",
                            "memberName": "totalDebt",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 67341,
                            "src": "7333:14:144",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 67414,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "7348:6:144",
                          "memberName": "rayDiv",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 62873,
                          "src": "7333:21:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 67420,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7333:61:144",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 67421,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "Conditional",
                      "src": "7279:115:144",
                      "trueExpression": {
                        "hexValue": "30",
                        "id": 67411,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7315:1:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7256:138:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 67423,
                  "nodeType": "ExpressionStatement",
                  "src": "7256:138:144"
                },
                {
                  "expression": {
                    "id": 67435,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 67424,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67375,
                        "src": "7407:4:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                          "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                        }
                      },
                      "id": 67426,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "7412:23:144",
                      "memberName": "currentStableBorrowRate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 67345,
                      "src": "7407:28:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 67433,
                          "name": "reserveId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 67353,
                          "src": "7533:9:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "id": 67428,
                                  "name": "addressProvider",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 67159,
                                  "src": "7458:15:144",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IAddressProvider_$45718",
                                    "typeString": "contract IAddressProvider"
                                  }
                                },
                                "id": 67429,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "7474:21:144",
                                "memberName": "getLendingRateManager",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 45602,
                                "src": "7458:37:144",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                  "typeString": "function () view external returns (address)"
                                }
                              },
                              "id": 67430,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7458:39:144",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 67427,
                            "name": "ILendingRateManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 47434,
                            "src": "7438:19:144",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_ILendingRateManager_$47434_$",
                              "typeString": "type(contract ILendingRateManager)"
                            }
                          },
                          "id": 67431,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7438:60:144",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ILendingRateManager_$47434",
                            "typeString": "contract ILendingRateManager"
                          }
                        },
                        "id": 67432,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "7513:19:144",
                        "memberName": "getMarketBorrowRate",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 47405,
                        "src": "7438:94:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256) view external returns (uint256)"
                        }
                      },
                      "id": 67434,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7438:105:144",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7407:136:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 67436,
                  "nodeType": "ExpressionStatement",
                  "src": "7407:136:144"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 67440,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 67437,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67375,
                        "src": "7560:4:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                          "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                        }
                      },
                      "id": 67438,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "7565:15:144",
                      "memberName": "utilizationRate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 67349,
                      "src": "7560:20:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "id": 67439,
                      "name": "OPTIMAL_UTILIZATION_RATE",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67153,
                      "src": "7583:24:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7560:47:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 67517,
                    "nodeType": "Block",
                    "src": "8140:395:144",
                    "statements": [
                      {
                        "expression": {
                          "id": 67499,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 67484,
                              "name": "vars",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 67375,
                              "src": "8155:4:144",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                                "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                              }
                            },
                            "id": 67486,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "8160:23:144",
                            "memberName": "currentStableBorrowRate",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 67345,
                            "src": "8155:28:144",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "id": 67495,
                                        "name": "OPTIMAL_UTILIZATION_RATE",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 67153,
                                        "src": "8290:24:144",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "expression": {
                                          "id": 67492,
                                          "name": "vars",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 67375,
                                          "src": "8262:4:144",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                                            "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                                          }
                                        },
                                        "id": 67493,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberLocation": "8267:15:144",
                                        "memberName": "utilizationRate",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 67349,
                                        "src": "8262:20:144",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 67494,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "8283:6:144",
                                      "memberName": "rayDiv",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 62873,
                                      "src": "8262:27:144",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 67496,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "8262:53:144",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 67490,
                                    "name": "_stableRateSlope1",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 67167,
                                    "src": "8237:17:144",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 67491,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "8255:6:144",
                                  "memberName": "rayMul",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 62846,
                                  "src": "8237:24:144",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 67497,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8237:79:144",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "expression": {
                                  "id": 67487,
                                  "name": "vars",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 67375,
                                  "src": "8186:4:144",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                                    "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                                  }
                                },
                                "id": 67488,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "8191:23:144",
                                "memberName": "currentStableBorrowRate",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 67345,
                                "src": "8186:28:144",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 67489,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "8215:3:144",
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 36583,
                              "src": "8186:32:144",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 67498,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8186:145:144",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8155:176:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 67500,
                        "nodeType": "ExpressionStatement",
                        "src": "8155:176:144"
                      },
                      {
                        "expression": {
                          "id": 67515,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 67501,
                              "name": "vars",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 67375,
                              "src": "8348:4:144",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                                "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                              }
                            },
                            "id": 67503,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "8353:25:144",
                            "memberName": "currentVariableBorrowRate",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 67343,
                            "src": "8348:30:144",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 67512,
                                    "name": "OPTIMAL_UTILIZATION_RATE",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 67153,
                                    "src": "8483:24:144",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 67509,
                                        "name": "_variableRateSlope1",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 67163,
                                        "src": "8455:19:144",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "expression": {
                                          "id": 67506,
                                          "name": "vars",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 67375,
                                          "src": "8427:4:144",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                                            "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                                          }
                                        },
                                        "id": 67507,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberLocation": "8432:15:144",
                                        "memberName": "utilizationRate",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 67349,
                                        "src": "8427:20:144",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 67508,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "8448:6:144",
                                      "memberName": "rayMul",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 62846,
                                      "src": "8427:27:144",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 67510,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "8427:48:144",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 67511,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "8476:6:144",
                                  "memberName": "rayDiv",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 62873,
                                  "src": "8427:55:144",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 67513,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8427:81:144",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "id": 67504,
                                "name": "_baseVariableBorrowRate",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 67161,
                                "src": "8381:23:144",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 67505,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "8405:3:144",
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 36583,
                              "src": "8381:27:144",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 67514,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8381:142:144",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8348:175:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 67516,
                        "nodeType": "ExpressionStatement",
                        "src": "8348:175:144"
                      }
                    ]
                  },
                  "id": 67518,
                  "nodeType": "IfStatement",
                  "src": "7556:979:144",
                  "trueBody": {
                    "id": 67483,
                    "nodeType": "Block",
                    "src": "7609:525:144",
                    "statements": [
                      {
                        "assignments": [
                          67442
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 67442,
                            "mutability": "mutable",
                            "name": "excessUtilizationRateRatio",
                            "nameLocation": "7632:26:144",
                            "nodeType": "VariableDeclaration",
                            "scope": 67483,
                            "src": "7624:34:144",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 67441,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "7624:7:144",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 67451,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 67449,
                              "name": "EXCESS_UTILIZATION_RATE",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 67156,
                              "src": "7719:23:144",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 67446,
                                  "name": "OPTIMAL_UTILIZATION_RATE",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 67153,
                                  "src": "7686:24:144",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "expression": {
                                    "id": 67443,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 67375,
                                    "src": "7661:4:144",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                                      "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                                    }
                                  },
                                  "id": 67444,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "7666:15:144",
                                  "memberName": "utilizationRate",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 67349,
                                  "src": "7661:20:144",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 67445,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "7682:3:144",
                                "memberName": "sub",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 36598,
                                "src": "7661:24:144",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 67447,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7661:50:144",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 67448,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "7712:6:144",
                            "memberName": "rayDiv",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 62873,
                            "src": "7661:57:144",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 67450,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7661:82:144",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7624:119:144"
                      },
                      {
                        "expression": {
                          "id": 67466,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 67452,
                              "name": "vars",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 67375,
                              "src": "7760:4:144",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                                "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                              }
                            },
                            "id": 67454,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "7765:23:144",
                            "memberName": "currentStableBorrowRate",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 67345,
                            "src": "7760:28:144",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 67463,
                                    "name": "excessUtilizationRateRatio",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 67442,
                                    "src": "7890:26:144",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 67461,
                                    "name": "_stableRateSlope2",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 67169,
                                    "src": "7865:17:144",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 67462,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "7883:6:144",
                                  "memberName": "rayMul",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 62846,
                                  "src": "7865:24:144",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 67464,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7865:52:144",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 67458,
                                    "name": "_stableRateSlope1",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 67167,
                                    "src": "7824:17:144",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "expression": {
                                      "id": 67455,
                                      "name": "vars",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 67375,
                                      "src": "7791:4:144",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                                        "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                                      }
                                    },
                                    "id": 67456,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "7796:23:144",
                                    "memberName": "currentStableBorrowRate",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 67345,
                                    "src": "7791:28:144",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 67457,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "7820:3:144",
                                  "memberName": "add",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 36583,
                                  "src": "7791:32:144",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 67459,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7791:51:144",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 67460,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "7843:3:144",
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 36583,
                              "src": "7791:55:144",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 67465,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7791:141:144",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7760:172:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 67467,
                        "nodeType": "ExpressionStatement",
                        "src": "7760:172:144"
                      },
                      {
                        "expression": {
                          "id": 67481,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 67468,
                              "name": "vars",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 67375,
                              "src": "7949:4:144",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                                "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                              }
                            },
                            "id": 67470,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "7954:25:144",
                            "memberName": "currentVariableBorrowRate",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 67343,
                            "src": "7949:30:144",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 67478,
                                    "name": "excessUtilizationRateRatio",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 67442,
                                    "src": "8080:26:144",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 67476,
                                    "name": "_variableRateSlope2",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 67165,
                                    "src": "8053:19:144",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 67477,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "8073:6:144",
                                  "memberName": "rayMul",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 62846,
                                  "src": "8053:26:144",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 67479,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8053:54:144",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 67473,
                                    "name": "_variableRateSlope1",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 67163,
                                    "src": "8010:19:144",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 67471,
                                    "name": "_baseVariableBorrowRate",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 67161,
                                    "src": "7982:23:144",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 67472,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "8006:3:144",
                                  "memberName": "add",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 36583,
                                  "src": "7982:27:144",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 67474,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7982:48:144",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 67475,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "8031:3:144",
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 36583,
                              "src": "7982:52:144",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 67480,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7982:140:144",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7949:173:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 67482,
                        "nodeType": "ExpressionStatement",
                        "src": "7949:173:144"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 67540,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 67519,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67375,
                        "src": "8547:4:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                          "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                        }
                      },
                      "id": 67521,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "8552:20:144",
                      "memberName": "currentLiquidityRate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 67347,
                      "src": "8547:25:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "id": 67537,
                              "name": "reserveFactor",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 67363,
                              "src": "8850:13:144",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "expression": {
                                "id": 67534,
                                "name": "PercentageMath",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 62719,
                                "src": "8813:14:144",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_PercentageMath_$62719_$",
                                  "typeString": "type(library PercentageMath)"
                                }
                              },
                              "id": 67535,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberLocation": "8828:17:144",
                              "memberName": "PERCENTAGE_FACTOR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 62602,
                              "src": "8813:32:144",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 67536,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "8846:3:144",
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 36598,
                            "src": "8813:36:144",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 67538,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8813:51:144",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 67530,
                                "name": "vars",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 67375,
                                "src": "8770:4:144",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                                  "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                                }
                              },
                              "id": 67531,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "8775:15:144",
                              "memberName": "utilizationRate",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 67349,
                              "src": "8770:20:144",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 67523,
                                  "name": "totalStableDebt",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 67357,
                                  "src": "8611:15:144",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "id": 67524,
                                  "name": "totalVariableDebt",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 67359,
                                  "src": "8641:17:144",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "expression": {
                                    "id": 67525,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 67375,
                                    "src": "8673:4:144",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                                      "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                                    }
                                  },
                                  "id": 67526,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "8678:25:144",
                                  "memberName": "currentVariableBorrowRate",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 67343,
                                  "src": "8673:30:144",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "id": 67527,
                                  "name": "averageStableBorrowRate",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 67361,
                                  "src": "8718:23:144",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 67522,
                                "name": "_getOverallBorrowRate",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 67611,
                                "src": "8575:21:144",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 67528,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8575:177:144",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 67529,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "8763:6:144",
                            "memberName": "rayMul",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 62846,
                            "src": "8575:194:144",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 67532,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8575:216:144",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 67533,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "8802:10:144",
                        "memberName": "percentMul",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 62667,
                        "src": "8575:237:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 67539,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8575:290:144",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8547:318:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 67541,
                  "nodeType": "ExpressionStatement",
                  "src": "8547:318:144"
                },
                {
                  "expression": {
                    "components": [
                      {
                        "expression": {
                          "id": 67542,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 67375,
                          "src": "8900:4:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                            "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                          }
                        },
                        "id": 67543,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "8905:20:144",
                        "memberName": "currentLiquidityRate",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 67347,
                        "src": "8900:25:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 67544,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 67375,
                          "src": "8940:4:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                            "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                          }
                        },
                        "id": 67545,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "8945:23:144",
                        "memberName": "currentStableBorrowRate",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 67345,
                        "src": "8940:28:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 67546,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 67375,
                          "src": "8983:4:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                            "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                          }
                        },
                        "id": 67547,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "8988:25:144",
                        "memberName": "currentVariableBorrowRate",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 67343,
                        "src": "8983:30:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 67548,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "8885:139:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 67372,
                  "id": 67549,
                  "nodeType": "Return",
                  "src": "8878:146:144"
                }
              ]
            },
            "baseFunctions": [
              46818
            ],
            "documentation": {
              "id": 67351,
              "nodeType": "StructuredDocumentation",
              "src": "5942:655:144",
              "text": " @dev Calculates the interest rates depending on the asset reserve's state and configurations.\n @param availableLiquidity The liquidity available in the corresponding fToken\n @param totalStableDebt The total borrowed from the reserve at a stable rate\n @param totalVariableDebt The total borrowed from the reserve at a variable rate\n @param averageStableBorrowRate The weighted average of all the stable rate loans\n @param reserveFactor The reserve portion of the interest that goes to the treasury of the market\n @return The liquidity rate, the stable borrow rate and the variable borrow rate*"
            },
            "functionSelector": "9b9c5b49",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "calculateInterestRate",
            "nameLocation": "6612:21:144",
            "overrides": {
              "id": 67365,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6889:8:144"
            },
            "parameters": {
              "id": 67364,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67353,
                  "mutability": "mutable",
                  "name": "reserveId",
                  "nameLocation": "6652:9:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67551,
                  "src": "6644:17:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67352,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6644:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67355,
                  "mutability": "mutable",
                  "name": "availableLiquidity",
                  "nameLocation": "6680:18:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67551,
                  "src": "6672:26:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67354,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6672:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67357,
                  "mutability": "mutable",
                  "name": "totalStableDebt",
                  "nameLocation": "6717:15:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67551,
                  "src": "6709:23:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67356,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6709:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67359,
                  "mutability": "mutable",
                  "name": "totalVariableDebt",
                  "nameLocation": "6751:17:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67551,
                  "src": "6743:25:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67358,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6743:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67361,
                  "mutability": "mutable",
                  "name": "averageStableBorrowRate",
                  "nameLocation": "6787:23:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67551,
                  "src": "6779:31:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67360,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6779:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67363,
                  "mutability": "mutable",
                  "name": "reserveFactor",
                  "nameLocation": "6829:13:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67551,
                  "src": "6821:21:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67362,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6821:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6633:216:144"
            },
            "returnParameters": {
              "id": 67372,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67367,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67551,
                  "src": "6930:7:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67366,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6930:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67369,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67551,
                  "src": "6952:7:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67368,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6952:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67371,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67551,
                  "src": "6974:7:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67370,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6974:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6915:77:144"
            },
            "scope": 67612,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 67611,
            "nodeType": "FunctionDefinition",
            "src": "9597:729:144",
            "nodes": [],
            "body": {
              "id": 67610,
              "nodeType": "Block",
              "src": "9830:496:144",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    67566
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 67566,
                      "mutability": "mutable",
                      "name": "totalDebt",
                      "nameLocation": "9849:9:144",
                      "nodeType": "VariableDeclaration",
                      "scope": 67610,
                      "src": "9841:17:144",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 67565,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9841:7:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 67571,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 67569,
                        "name": "totalVariableDebt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67556,
                        "src": "9881:17:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 67567,
                        "name": "totalStableDebt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67554,
                        "src": "9861:15:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 67568,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "9877:3:144",
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 36583,
                      "src": "9861:19:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 67570,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9861:38:144",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9841:58:144"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 67574,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 67572,
                      "name": "totalDebt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67566,
                      "src": "9916:9:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 67573,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9929:1:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "9916:14:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 67577,
                  "nodeType": "IfStatement",
                  "src": "9912:28:144",
                  "trueBody": {
                    "expression": {
                      "hexValue": "30",
                      "id": 67575,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9939:1:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 67564,
                    "id": 67576,
                    "nodeType": "Return",
                    "src": "9932:8:144"
                  }
                },
                {
                  "assignments": [
                    67579
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 67579,
                      "mutability": "mutable",
                      "name": "weightedVariableRate",
                      "nameLocation": "9961:20:144",
                      "nodeType": "VariableDeclaration",
                      "scope": 67610,
                      "src": "9953:28:144",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 67578,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9953:7:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 67586,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 67584,
                        "name": "currentVariableBorrowRate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67558,
                        "src": "10020:25:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 67580,
                            "name": "totalVariableDebt",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 67556,
                            "src": "9984:17:144",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 67581,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "10002:8:144",
                          "memberName": "wadToRay",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 62908,
                          "src": "9984:26:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256) pure returns (uint256)"
                          }
                        },
                        "id": 67582,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9984:28:144",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 67583,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "10013:6:144",
                      "memberName": "rayMul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 62846,
                      "src": "9984:35:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 67585,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9984:62:144",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9953:93:144"
                },
                {
                  "assignments": [
                    67588
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 67588,
                      "mutability": "mutable",
                      "name": "weightedStableRate",
                      "nameLocation": "10067:18:144",
                      "nodeType": "VariableDeclaration",
                      "scope": 67610,
                      "src": "10059:26:144",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 67587,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10059:7:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 67595,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 67593,
                        "name": "currentAverageStableBorrowRate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67560,
                        "src": "10122:30:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 67589,
                            "name": "totalStableDebt",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 67554,
                            "src": "10088:15:144",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 67590,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "10104:8:144",
                          "memberName": "wadToRay",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 62908,
                          "src": "10088:24:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256) pure returns (uint256)"
                          }
                        },
                        "id": 67591,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10088:26:144",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 67592,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "10115:6:144",
                      "memberName": "rayMul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 62846,
                      "src": "10088:33:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 67594,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10088:65:144",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10059:94:144"
                },
                {
                  "assignments": [
                    67597
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 67597,
                      "mutability": "mutable",
                      "name": "overallBorrowRate",
                      "nameLocation": "10174:17:144",
                      "nodeType": "VariableDeclaration",
                      "scope": 67610,
                      "src": "10166:25:144",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 67596,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10166:7:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 67607,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 67603,
                            "name": "totalDebt",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 67566,
                            "src": "10260:9:144",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 67604,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "10270:8:144",
                          "memberName": "wadToRay",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 62908,
                          "src": "10260:18:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256) pure returns (uint256)"
                          }
                        },
                        "id": 67605,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10260:20:144",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 67600,
                            "name": "weightedStableRate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 67588,
                            "src": "10233:18:144",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 67598,
                            "name": "weightedVariableRate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 67579,
                            "src": "10208:20:144",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 67599,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "10229:3:144",
                          "memberName": "add",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 36583,
                          "src": "10208:24:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 67601,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10208:44:144",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 67602,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "10253:6:144",
                      "memberName": "rayDiv",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 62873,
                      "src": "10208:51:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 67606,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10208:73:144",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10166:115:144"
                },
                {
                  "expression": {
                    "id": 67608,
                    "name": "overallBorrowRate",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 67597,
                    "src": "10301:17:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 67564,
                  "id": 67609,
                  "nodeType": "Return",
                  "src": "10294:24:144"
                }
              ]
            },
            "documentation": {
              "id": 67552,
              "nodeType": "StructuredDocumentation",
              "src": "9040:551:144",
              "text": " @dev Calculates the overall borrow rate as the weighted average between the total variable debt and total stable debt\n @param totalStableDebt The total borrowed from the reserve a stable rate\n @param totalVariableDebt The total borrowed from the reserve at a variable rate\n @param currentVariableBorrowRate The current variable borrow rate of the reserve\n @param currentAverageStableBorrowRate The current weighted average of all the stable rate loans\n @return The weighted averaged borrow rate*"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getOverallBorrowRate",
            "nameLocation": "9606:21:144",
            "parameters": {
              "id": 67561,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67554,
                  "mutability": "mutable",
                  "name": "totalStableDebt",
                  "nameLocation": "9646:15:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67611,
                  "src": "9638:23:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67553,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9638:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67556,
                  "mutability": "mutable",
                  "name": "totalVariableDebt",
                  "nameLocation": "9680:17:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67611,
                  "src": "9672:25:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67555,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9672:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67558,
                  "mutability": "mutable",
                  "name": "currentVariableBorrowRate",
                  "nameLocation": "9716:25:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67611,
                  "src": "9708:33:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67557,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9708:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67560,
                  "mutability": "mutable",
                  "name": "currentAverageStableBorrowRate",
                  "nameLocation": "9760:30:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67611,
                  "src": "9752:38:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67559,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9752:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9627:170:144"
            },
            "returnParameters": {
              "id": 67564,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67563,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67611,
                  "src": "9821:7:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67562,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9821:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9820:9:144"
            },
            "scope": 67612,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 67140,
              "name": "IInterestRateStrategy",
              "nameLocations": [
                "991:21:144"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 46846,
              "src": "991:21:144"
            },
            "id": 67141,
            "nodeType": "InheritanceSpecifier",
            "src": "991:21:144"
          }
        ],
        "canonicalName": "InterestRateStrategy",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 67139,
          "nodeType": "StructuredDocumentation",
          "src": "633:323:144",
          "text": " @title InterestRateStrategy contract\n @notice Implfements the calculation of the interest rates depending on the reserve state\n @dev The model of interest rate is based on 2 slopes, one before the `OPTIMAL_UTILIZATION_RATE`\n point of utilization and another from that one to 100%\n @author FluidNFT*"
        },
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          67612,
          46846
        ],
        "name": "InterestRateStrategy",
        "nameLocation": "967:20:144",
        "scope": 67613,
        "usedErrors": []
      }
    ],
    "license": "AGPL-3.0"
  },
  "id": 144
}
```

</details>


# IInterestRateStrategy

{% tabs %}
{% tab title="IInterestRateStragegy.sol" %}

```solidity
// SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.16;

/**
 * @title IInterestRateStrategy interface
 * @dev Interface for the calculation of the interest rates
 * @author FluidNFT
 */
interface IInterestRateStrategy {
    function variableRateSlope1() external view returns (uint256);

    function variableRateSlope2() external view returns (uint256);
    
    function stableRateSlope1() external view returns (uint256);

    function stableRateSlope2() external view returns (uint256);
    
    function baseVariableBorrowRate() external view returns (uint256);

    function maxVariableBorrowRate() external view returns (uint256);

    function calculateInterestRate(
        uint256 reserveId,
        uint256 availableLiquidity,
        uint256 totalStableDebt,
        uint256 totalVariableDebt,
        uint256 averageStableBorrowRate,
        uint256 reserveFactor
    ) external view returns (uint256, uint256, uint256);

    function calculateInterestRates(
        uint256 reserveId,
        address asset,
        address fToken,
        uint256 liquidityAdded,
        uint256 liquidityTaken,
        uint256 totalStableDebt,
        uint256 totalVariableDebt,
        uint256 averageStableBorrowRate,
        uint256 reserveFactor
    ) external view returns (
        uint256 liquidityRate, 
        uint256 stableBorrowRate,
        uint256 variableBorrowRate
    );
}
```

{% endtab %}
{% endtabs %}


# Lending Rate Manager

The `LendingRateManager` contract is used to manage fixed-term loan stable borrow rates and loan-to-value ratios for given loan durations.

## Methods <a href="#functionality" id="functionality"></a>

### setMarketBorrowRate() <a href="#functionality" id="functionality"></a>

**`function setMarketBorrowRate(uint256 reserveId, uint256 rate)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Sets the fixed-term stable borrow rate for a given reserve.

| Parameter Name | Type    | Description              |
| -------------- | ------- | ------------------------ |
| `reserveId`    | uint256 | id of the target reserve |
| `rate`         | uint256 | interest rate APR in ray |

### setMarketDurationLoanToValue()

**`function setMarketDurationLoanToValue(uint256 reserveId, uint256 duration, uint256 ltv)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Sets the LTV for a given reserve, for a given duration.

| Parameter Name | Type    | Description                                       |
| -------------- | ------- | ------------------------------------------------- |
| `reserveId`    | uint256 | id of the target reserve                          |
| `duration`     | uint256 | duration of the loan                              |
| `ltv`          | uint256 | loan-to-value percentage in 1e4, e.g. 1000 == 10% |

## View Methods

### getMarketBorrowRate()[​](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#functionality) <a href="#functionality" id="functionality"></a>

**`function getMarketBorrowRate(uint256 reserveId)`**

Gets the fixed-term stable borrow rate for a given reserve.

| Parameter Name | Type    | Description              |
| -------------- | ------- | ------------------------ |
| `reserveId`    | uint256 | id of the target reserve |

#### Returns

| Parameter Name | Type    | Description              |
| -------------- | ------- | ------------------------ |
| `rate`         | uint256 | interest rate APR in ray |

### getMarketDurationLoanToValue()

**`function vetMarketDurationLoanToValue(uint256 reserveId, uint256 duration)`**[**​**](https://docs-fluidnft.vercel.app/docs/developers/protocol/contract-reference/p2pool#initreserveaddress-collateral-address-asset-uint256-maxtokenid-uint256-mintokenid-address-interestratestrategy-address-ftoken-address-debttoken-address-stakedtoken-string-memory-assetpricefeed)

Gets the LTV for a given reserve, for a given duration.

| Parameter Name | Type    | Description              |
| -------------- | ------- | ------------------------ |
| `reserveId`    | uint256 | id of the target reserve |
| `duration`     | uint256 | duration of the loan     |

#### Returns

| Parameter Name | Type    | Description                                       |
| -------------- | ------- | ------------------------------------------------- |
| `ltv`          | uint256 | loan-to-value percentage in 1e4, e.g. 1000 == 10% |

## ABI

<details>

<summary>Lending Rate Manager ABI</summary>

```
{
  "abi": [
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        }
      ],
      "name": "getMarketBorrowRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_reserveId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_duration",
          "type": "uint256"
        }
      ],
      "name": "getMarketDurationLoanToValue",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "rate",
          "type": "uint256"
        }
      ],
      "name": "setMarketBorrowRate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_reserveId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_duration",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_ltv",
          "type": "uint256"
        }
      ],
      "name": "setMarketDurationLoanToValue",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x",
    "sourceMap": "",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x",
    "sourceMap": "",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "getMarketBorrowRate(uint256)": "f12c8b35",
    "getMarketDurationLoanToValue(uint256,uint256)": "2ee1bbb0",
    "setMarketBorrowRate(uint256,uint256)": "7dc492d1",
    "setMarketDurationLoanToValue(uint256,uint256,uint256)": "2d65150b"
  },
  "rawMetadata": "{\"compiler\":{\"version\":\"0.8.16+commit.07a7930e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"}],\"name\":\"getMarketBorrowRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_reserveId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_duration\",\"type\":\"uint256\"}],\"name\":\"getMarketDurationLoanToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"name\":\"setMarketBorrowRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_reserveId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_ltv\",\"type\":\"uint256\"}],\"name\":\"setMarketDurationLoanToValue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getMarketBorrowRate(uint256)\":{\"details\":\"returns the market borrow rate in ray*\"},\"getMarketDurationLoanToValue(uint256,uint256)\":{\"details\":\"Sets the borrow rate of the reserve*\"},\"setMarketBorrowRate(uint256,uint256)\":{\"details\":\"sets the market borrow rate. Rate value must be in ray*\"},\"setMarketDurationLoanToValue(uint256,uint256,uint256)\":{\"details\":\"Sets the borrow rate of the reserve*\"}},\"title\":\"ILendingRateManager interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Interface for the FluidNFT borrow rate manager.  Provides the average market borrow rate to be used as a base for the stable borrow rate calculations*\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/interfaces/ILendingRateManager.sol\":\"ILendingRateManager\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@chainlink/=lib/chainlink/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":chainlink/=lib/chainlink/integration-tests/contracts/ethereum/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"src/interfaces/ILendingRateManager.sol\":{\"keccak256\":\"0x6078c32591ae3ced86c344ad2f228fbcc625f09cd59a8f7014355adb89dfcde0\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://fa594c0ceb1a0a085a6b077ac0729663f839f33f760eb8775ff1b3d25415e097\",\"dweb:/ipfs/QmXU74R73UDHiwvVaU9LRrC1tHaDq5eCerenKQtFX97UL6\"]}},\"version\":1}",
  "metadata": {
    "compiler": {
      "version": "0.8.16+commit.07a7930e"
    },
    "language": "Solidity",
    "output": {
      "abi": [
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getMarketBorrowRate",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "_reserveId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "_duration",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getMarketDurationLoanToValue",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "rate",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setMarketBorrowRate"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "_reserveId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "_duration",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "_ltv",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setMarketDurationLoanToValue"
        }
      ],
      "devdoc": {
        "kind": "dev",
        "methods": {
          "getMarketBorrowRate(uint256)": {
            "details": "returns the market borrow rate in ray*"
          },
          "getMarketDurationLoanToValue(uint256,uint256)": {
            "details": "Sets the borrow rate of the reserve*"
          },
          "setMarketBorrowRate(uint256,uint256)": {
            "details": "sets the market borrow rate. Rate value must be in ray*"
          },
          "setMarketDurationLoanToValue(uint256,uint256,uint256)": {
            "details": "Sets the borrow rate of the reserve*"
          }
        },
        "version": 1
      },
      "userdoc": {
        "kind": "user",
        "methods": {},
        "version": 1
      }
    },
    "settings": {
      "remappings": [
        ":@chainlink/=lib/chainlink/",
        ":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
        ":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
        ":chainlink/=lib/chainlink/integration-tests/contracts/ethereum/src/",
        ":ds-test/=lib/forge-std/lib/ds-test/src/",
        ":forge-std/=lib/forge-std/src/"
      ],
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "metadata": {
        "bytecodeHash": "ipfs"
      },
      "compilationTarget": {
        "src/interfaces/ILendingRateManager.sol": "ILendingRateManager"
      },
      "libraries": {}
    },
    "sources": {
      "src/interfaces/ILendingRateManager.sol": {
        "keccak256": "0x6078c32591ae3ced86c344ad2f228fbcc625f09cd59a8f7014355adb89dfcde0",
        "urls": [
          "bzz-raw://fa594c0ceb1a0a085a6b077ac0729663f839f33f760eb8775ff1b3d25415e097",
          "dweb:/ipfs/QmXU74R73UDHiwvVaU9LRrC1tHaDq5eCerenKQtFX97UL6"
        ],
        "license": "AGPL-3.0"
      }
    },
    "version": 1
  },
  "ast": {
    "absolutePath": "src/interfaces/ILendingRateManager.sol",
    "id": 49045,
    "exportedSymbols": {
      "ILendingRateManager": [
        49044
      ]
    },
    "nodeType": "SourceUnit",
    "src": "37:933:114",
    "nodes": [
      {
        "id": 49006,
        "nodeType": "PragmaDirective",
        "src": "37:23:114",
        "nodes": [],
        "literals": [
          "solidity",
          "0.8",
          ".16"
        ]
      },
      {
        "id": 49044,
        "nodeType": "ContractDefinition",
        "src": "276:693:114",
        "nodes": [
          {
            "id": 49015,
            "nodeType": "FunctionDefinition",
            "src": "377:80:114",
            "nodes": [],
            "documentation": {
              "id": 49008,
              "nodeType": "StructuredDocumentation",
              "src": "312:60:114",
              "text": "@dev returns the market borrow rate in ray*"
            },
            "functionSelector": "f12c8b35",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketBorrowRate",
            "nameLocation": "386:19:114",
            "parameters": {
              "id": 49011,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 49010,
                  "mutability": "mutable",
                  "name": "reserveId",
                  "nameLocation": "414:9:114",
                  "nodeType": "VariableDeclaration",
                  "scope": 49015,
                  "src": "406:17:114",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 49009,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "406:7:114",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "405:19:114"
            },
            "returnParameters": {
              "id": 49014,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 49013,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 49015,
                  "src": "448:7:114",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 49012,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "448:7:114",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "447:9:114"
            },
            "scope": 49044,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 49023,
            "nodeType": "FunctionDefinition",
            "src": "545:71:114",
            "nodes": [],
            "documentation": {
              "id": 49016,
              "nodeType": "StructuredDocumentation",
              "src": "463:77:114",
              "text": "@dev sets the market borrow rate. Rate value must be in ray*"
            },
            "functionSelector": "7dc492d1",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "setMarketBorrowRate",
            "nameLocation": "554:19:114",
            "parameters": {
              "id": 49021,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 49018,
                  "mutability": "mutable",
                  "name": "reserveId",
                  "nameLocation": "582:9:114",
                  "nodeType": "VariableDeclaration",
                  "scope": 49023,
                  "src": "574:17:114",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 49017,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "574:7:114",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49020,
                  "mutability": "mutable",
                  "name": "rate",
                  "nameLocation": "601:4:114",
                  "nodeType": "VariableDeclaration",
                  "scope": 49023,
                  "src": "593:12:114",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 49019,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "593:7:114",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "573:33:114"
            },
            "returnParameters": {
              "id": 49022,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "615:0:114"
            },
            "scope": 49044,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 49033,
            "nodeType": "FunctionDefinition",
            "src": "687:109:114",
            "nodes": [],
            "documentation": {
              "id": 49024,
              "nodeType": "StructuredDocumentation",
              "src": "622:60:114",
              "text": " @dev Sets the borrow rate of the reserve*"
            },
            "functionSelector": "2ee1bbb0",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getMarketDurationLoanToValue",
            "nameLocation": "696:28:114",
            "parameters": {
              "id": 49029,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 49026,
                  "mutability": "mutable",
                  "name": "_reserveId",
                  "nameLocation": "733:10:114",
                  "nodeType": "VariableDeclaration",
                  "scope": 49033,
                  "src": "725:18:114",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 49025,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "725:7:114",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49028,
                  "mutability": "mutable",
                  "name": "_duration",
                  "nameLocation": "753:9:114",
                  "nodeType": "VariableDeclaration",
                  "scope": 49033,
                  "src": "745:17:114",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 49027,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "745:7:114",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "724:39:114"
            },
            "returnParameters": {
              "id": 49032,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 49031,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 49033,
                  "src": "787:7:114",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 49030,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "787:7:114",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "786:9:114"
            },
            "scope": 49044,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 49043,
            "nodeType": "FunctionDefinition",
            "src": "867:100:114",
            "nodes": [],
            "documentation": {
              "id": 49034,
              "nodeType": "StructuredDocumentation",
              "src": "802:60:114",
              "text": " @dev Sets the borrow rate of the reserve*"
            },
            "functionSelector": "2d65150b",
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "setMarketDurationLoanToValue",
            "nameLocation": "876:28:114",
            "parameters": {
              "id": 49041,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 49036,
                  "mutability": "mutable",
                  "name": "_reserveId",
                  "nameLocation": "913:10:114",
                  "nodeType": "VariableDeclaration",
                  "scope": 49043,
                  "src": "905:18:114",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 49035,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "905:7:114",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49038,
                  "mutability": "mutable",
                  "name": "_duration",
                  "nameLocation": "933:9:114",
                  "nodeType": "VariableDeclaration",
                  "scope": 49043,
                  "src": "925:17:114",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 49037,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "925:7:114",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 49040,
                  "mutability": "mutable",
                  "name": "_ltv",
                  "nameLocation": "952:4:114",
                  "nodeType": "VariableDeclaration",
                  "scope": 49043,
                  "src": "944:12:114",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 49039,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "944:7:114",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "904:53:114"
            },
            "returnParameters": {
              "id": 49042,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "966:0:114"
            },
            "scope": 49044,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "abstract": false,
        "baseContracts": [],
        "canonicalName": "ILendingRateManager",
        "contractDependencies": [],
        "contractKind": "interface",
        "documentation": {
          "id": 49007,
          "nodeType": "StructuredDocumentation",
          "src": "62:212:114",
          "text": " @title ILendingRateManager interface\n @notice Interface for the FluidNFT borrow rate manager. \n Provides the average market borrow rate to be used as a base for the stable borrow rate calculations*"
        },
        "fullyImplemented": false,
        "linearizedBaseContracts": [
          49044
        ],
        "name": "ILendingRateManager",
        "nameLocation": "286:19:114",
        "scope": 49045,
        "usedErrors": []
      }
    ],
    "license": "AGPL-3.0"
  },
  "id": 114
}
```

</details>


# ILendingRateManager

{% tabs %}
{% tab title="ILendingRateManager.sol" %}

```solidity
// SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.16;

/**
 * @title ILendingRateManager interface
 * @notice Interface for the FluidNFT borrow rate manager. 
 * Provides the average market borrow rate to be used as a base for the stable borrow rate calculations
 **/

interface ILendingRateManager {
    /**
     @dev returns the market borrow rate in ray
     **/
    function getMarketBorrowRate(uint256 reserveId) external view returns (uint256);

    /**
     @dev sets the market borrow rate. Rate value must be in ray
     **/
    function setMarketBorrowRate(uint256 reserveId, uint256 rate) external;

    /**
     * @dev Sets the borrow rate of the reserve
     **/
    function getMarketDurationLoanToValue(uint256 _reserveId, uint256 _duration) external view returns (uint256);

    /**
     * @dev Sets the borrow rate of the reserve
     **/
    function setMarketDurationLoanToValue(uint256 _reserveId, uint256 _duration, uint256 _ltv) external;
}
```

{% endtab %}
{% endtabs %}


# F Tokens

fTokens are yield-generating tokens that are minted and burned upon `deposit` and `withdraw`. The fTokens' value is pegged to the value of the corresponding deposited asset at a 1:1 ratio, and can be safely stored, transferred or traded. All interest collected by the fTokens reserves are distributed to fTokens holders directly by continuously increasing their wallet balance.

{% hint style="warning" %}
For all minting and burning actions, see `Deposit()` and `Withdraw()` methods in the `LendingPool` contract.
{% endhint %}

## EIP20 Methods

All standard EIP20 methods are implemented, such as `balanceOf()`, `transfer()`, `transferFrom()`, `approve()`, `totalSupply()`, etc.

{% hint style="info" %}
`balanceOf()` will always return the most up to date balance of the user, which includes their principal balance + the interest generated by the principal balance.
{% endhint %}

## EIP2612 Methods

### permit()

**`function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)`**

Allows a user to permit another account (or contract) to use their funds using a signed message. This enables gas-less transactions and single approval/transfer transactions.

| Parameter  | Type    | Description                                                                            |
| ---------- | ------- | -------------------------------------------------------------------------------------- |
| `owner`    | address | The owner of the funds                                                                 |
| `spender`  | address | The spender for the funds                                                              |
| `value`    | uint256 | The amount the `spender` is permitted to use                                           |
| `deadline` | uint256 | The deadline timestamp that the permit is valid. Use `type(uint).max` for no deadline. |
| `v`        | uint8   | Signature parameter                                                                    |
| `r`        | bytes32 | Signature parameter                                                                    |
| `s`        | bytes32 | Signature parameter                                                                    |

{% tabs %}
{% tab title="Web3.js" %}

```javascript
import { signTypedData_v4 } from 'eth-sig-util'
import { fromRpcSig } from 'ethereumjs-util'

// ... other imports

import fTokenAbi from "./fTokenAbi.json"

// ... setup your web3 provider

const fTokenAddress = "FTOKEN_ADDRESS"
const fTokenContract = new web3.eth.Contract(fTokenAbi, fTokenAddress)

const privateKey = "YOUR_PRIVATE_KEY_WITHOUT_0x"
const chainId = 1
const owner = "OWNER_ADDRESS"
const spender = "SPENDER_ADDRESS"
const value = 100 // Amount the spender is permitted
const nonce = 1 // The next valid nonce, use `_nonces()`
const deadline = 1600093162

const permitParams = {
  types: {
    EIP712Domain: [
      { name: "name", type: "string" },
      { name: "version", type: "string" },
      { name: "chainId", type: "uint256" },
      { name: "verifyingContract", type: "address" },
    ],
    Permit: [
      { name: "owner", type: "address" },
      { name: "spender", type: "address" },
      { name: "value", type: "uint256" },
      { name: "nonce", type: "uint256" },
      { name: "deadline", type: "uint256" },
    ],
  },
  primaryType: "Permit",
  domain: {
    name: "fTOKEN_NAME",
    version: "1",
    chainId: chainId,
    verifyingContract: fTokenAddress,
  },
  message: {
    owner,
    spender,
    value,
    nonce,
    deadline,
  },
}

const signature = signTypedData_v4(
  Buffer.from(privateKey, "hex"),
  { data: permitParams }
)

// The signature can now be used to execute the transaction

const { v, r, s } = fromRpcSig(signature)

await fTokenContract.methods
    .permit({
      owner,
      spender,
      value,
      deadline,
      v,
      r,
      s
    })
    .send()
    .catch((e) => {
        throw Error(`Error permitting: ${e.message}`)
    })
```

{% endtab %}
{% endtabs %}

### \_nonces()

**`function _nonces(address owner) public`**

Returns the next valid nonce to submit when calling `permit()`

## Methods

### UNDERLYING\_ASSET\_ADDRESS()

**`function UNDERLYING_ASSET_ADDRESS()`**

Returns the underlying asset of the fToken.

### RESERVE\_TREASURY\_ADDRESS()

**`function RESERVE_TREASURY_ADDRESS()`**

Returns the address of the fTokens reserve treasury.

### POOL()

**`function POOL()`**

Returns the address of the associated [`LendingPool`](/technical-resources/developers/contract-reference/lendingpool) for the fToken.

### scaledBalanceOf()

**`function scaledBalanceOf(address user)`**

Returns the scaled balance of `user` as a `uint256`.

The scaled balance is the balance of the underlying asset of the user (amount deposited), divided by the current liquidity index at the moment of the update.

I.e. $$scaledBalance = amount Deposited / currentLiquidityIndex$$

This essentially 'marks' when a user has deposited in the reserve pool, and can be used to calculate the users current compounded fToken balance.

Example:

* User A deposits 100 ETH at the liquidity index of 1.1
* User B deposits another amount into the same pool
* The liquidity index is now 1.2.
* Therefore to calculate User A's current compounded fToken balance, the reverse operation should be performed: $$fTokenBalance = scaledBalance \* currentLiquidityIndex$$

### getScaledUserBalanceAndSupply()

**`function getScaledUserBalanceAndSupply(address user)`**

Returns the scaled balance of `user` and the principal total supply.

#### Return values

| Type    | Description            |
| ------- | ---------------------- |
| uint256 | scaled balance of user |
| uint256 | principal total supply |

### scaledTotalSupply()

**`function scaledTotalSupply()`**

Returns the scaled total supply of the fToken as `uint256`.

The scaled total supply is the sum of all the updated stored balances, divided by the reserve index at the moment of the update.

**`function isTransferAllowed(address user, uint256 amount)`**

Returns `true` if a transfer is allowed.

Specifically, a transfer will fail if the resulting Health Factor of `user` will end up being below 1.

<details>

<summary>FToken ABI</summary>

```
{
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "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": "value",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "BalanceTransfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "Burn",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "creatorAddress",
          "type": "uint256"
        }
      ],
      "name": "CreatorAddressUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "creatorPercentage",
          "type": "uint256"
        }
      ],
      "name": "CreatorPecentageUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "underlyingCollateral",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "underlyingAsset",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "lendingPool",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "incentivesController",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "treasury",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "creator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "creatorPercentage",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "auctionCallerPercentage",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "auctionCreatorPercentage",
          "type": "uint256"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "Mint",
      "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": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "POOL",
      "outputs": [
        {
          "internalType": "contract ILendingPool",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "RESERVE_TREASURY_ADDRESS",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "UNDERLYING_ASSET_ADDRESS",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "UNDERLYING_COLLATERAL_ADDRESS",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "UNDERLYING_MAX_TOKEN_ID",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "UNDERLYING_MIN_TOKEN_ID",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "receiverOfUnderlying",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "subtractedValue",
          "type": "uint256"
        }
      ],
      "name": "decreaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "exchangeRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getAuctionCallerPercentage",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getAuctionCreatorPercentage",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getPoolIncentivesController",
      "outputs": [
        {
          "internalType": "contract IPoolIncentivesController",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getReserveCreatorAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getReserveCreatorPercentage",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getReserveNormalizationFactor",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "getScaledUserBalanceAndSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "addedValue",
          "type": "uint256"
        }
      ],
      "name": "increaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IAddressProvider",
          "name": "addressProvider",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "underlyingCollateral",
              "type": "address"
            },
            {
              "internalType": "string",
              "name": "underlyingCollateralName",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "underlyingCollateralSymbol",
              "type": "string"
            },
            {
              "internalType": "uint256",
              "name": "underlyingMaxTokenId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "underlyingMinTokenId",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "underlyingAsset",
              "type": "address"
            },
            {
              "internalType": "string",
              "name": "underlyingAssetName",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "underlyingAssetSymbol",
              "type": "string"
            },
            {
              "internalType": "uint8",
              "name": "underlyingAssetDecimals",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "fTokenImpl",
              "type": "address"
            },
            {
              "internalType": "string",
              "name": "fTokenName",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "fTokenSymbol",
              "type": "string"
            },
            {
              "internalType": "address",
              "name": "stableDebtTokenImpl",
              "type": "address"
            },
            {
              "internalType": "string",
              "name": "stableDebtTokenName",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "stableDebtTokenSymbol",
              "type": "string"
            },
            {
              "internalType": "address",
              "name": "variableDebtTokenImpl",
              "type": "address"
            },
            {
              "internalType": "string",
              "name": "variableDebtTokenName",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "variableDebtTokenSymbol",
              "type": "string"
            },
            {
              "internalType": "address",
              "name": "interestRateStrategy",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "baseLTV",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "treasury",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "creator",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "creatorPercentage",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "auctionCallerPercentage",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "auctionCreatorPercentage",
              "type": "uint256"
            },
            {
              "internalType": "string",
              "name": "assetPriceFeed",
              "type": "string"
            }
          ],
          "internalType": "struct ConfigTypes.InitReserveInput",
          "name": "input",
          "type": "tuple"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "liquidationFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "mintAuctionPaymentToStakeholders",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "mintStableDebtRepaymentToStakeholders",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "mintVariableDebtRepaymentToStakeholders",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "scaledBalanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "scaledTotalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "auctionCallerPercentage",
          "type": "uint256"
        }
      ],
      "name": "setAuctionCallerPercentage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "auctionCreatorPercentage",
          "type": "uint256"
        }
      ],
      "name": "setAuctionCreatorPercentage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "creator",
          "type": "address"
        }
      ],
      "name": "setReserveCreatorAddress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "creatorPercentage",
          "type": "uint256"
        }
      ],
      "name": "setReserveCreatorPercentage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferUnderlyingTo",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e4565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b612c6680620000f46000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c806357f1b83711610130578063acac18e4116100b8578063c35be0171161007c578063c35be01714610486578063d7020d0a1461048e578063dd62ed3e146104a1578063e8f7a1a5146104b4578063f9e2bf6b146104c757600080fd5b8063acac18e414610436578063ae16733514610449578063b16a19de1461045a578063b1bf962d1461046b578063bc1d19dd1461047357600080fd5b80637535d246116100ff5780637535d246146103ed5780637ccd3b46146103f557806395d89b4114610408578063a457c2d714610410578063a9059cbb1461042357600080fd5b806357f1b837146103a3578063679d0095146103b45780636b8465f8146103c757806370a08231146103da57600080fd5b80631da24f3e116101be57806336a722341161018257806336a722341461035c57806339509351146103645780633ba0b9a91461037757806347bec6f01461037f5780634efecaa51461039057600080fd5b80631da24f3e1461030657806323b872dd146103195780632d6aa1281461032c57806330c1e38b14610334578063313ce5671461034757600080fd5b806314ff75c91161020557806314ff75c9146102ae578063156e29f6146102b657806318160ddd146102c957806319ef9268146102d15780631d165564146102f157600080fd5b8063046016081461023757806306fdde031461024e578063095ea7b3146102635780630afbcdc914610286575b600080fd5b606a545b6040519081526020015b60405180910390f35b6102566104cf565b6040516102459190612654565b61027661027136600461269f565b610561565b6040519015158152602001610245565b6102996102943660046126cb565b61057b565b60408051928352602083019190915201610245565b606e5461023b565b6102766102c43660046126e8565b610593565b61023b610690565b6102d96107b3565b6040516001600160a01b039091168152602001610245565b6103046102ff36600461271d565b6107c2565b005b61023b6103143660046126cb565b610bcc565b610276610327366004612775565b610bd7565b606c5461023b565b6103046103423660046127b6565b610bfb565b60655460405160ff9091168152602001610245565b61023b610c68565b61027661037236600461269f565b610d66565b61023b610d88565b6066546001600160a01b03166102d9565b61023b61039e36600461269f565b610e92565b6068546001600160a01b03166102d9565b6103046103c23660046126e8565b610f08565b6103046103d536600461281b565b610f6f565b61023b6103e83660046126cb565b610fcb565b6102d96110dd565b61030461040336600461281b565b6110e7565b610256611143565b61027661041e36600461269f565b611152565b61027661043136600461269f565b6111cd565b61030461044436600461281b565b6111db565b6067546001600160a01b03166102d9565b6069546001600160a01b03166102d9565b61023b611237565b6103046104813660046126cb565b611242565b606b5461023b565b61030461049c366004612834565b6112bb565b61023b6104af36600461287a565b6113d8565b6103046104c23660046128a8565b611403565b606d5461023b565b6060603680546104de906128ca565b80601f016020809104026020016040519081016040528092919081815260200182805461050a906128ca565b80156105575780601f1061052c57610100808354040283529160200191610557565b820191906000526020600020905b81548152906001019060200180831161053a57829003601f168201915b5050505050905090565b60003361056f81858561146f565b60019150505b92915050565b60008061058783611593565b60355491509150915091565b600061059d6115ae565b6001600160a01b0316336001600160a01b0316146040518060400160405280600381526020016203530360ec1b815250906105f45760405162461bcd60e51b81526004016105eb9190612654565b60405180910390fd5b50600061060085611593565b9050600061060e8585611627565b60408051808201909152600381526235303160e81b6020820152909150816106495760405162461bcd60e51b81526004016105eb9190612654565b506106548682611661565b60408051868152602081018690526001600160a01b03881691600080516020612bf1833981519152910160405180910390a25015949350505050565b60008061069b6115ae565b905060006106a860355490565b9050806000036106bb5760009250505090565b606854606954606a54606b546040516352120e2360e01b81526107ac946001600160a01b038881169563dcc5cded9587956352120e239561070595851694909316926004016128fe565b602060405180830381865afa158015610722573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107469190612927565b6040518263ffffffff1660e01b815260040161076491815260200190565b602060405180830381865afa158015610781573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a59190612927565b8290611717565b9250505090565b60006107bd611753565b905090565b600054610100900460ff16158080156107e25750600054600160ff909116105b806107fc5750303b1580156107fc575060005460ff166001145b61085f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016105eb565b6000805460ff191660011790558015610882576000805461ff0019166101001790555b610922610893610140840184612940565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506108d692505050610160850185612940565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061091d925050506101208601610100870161298e565b6117a8565b6109346102a0830161028084016126cb565b606780546001600160a01b0319166001600160a01b03929092169190911790556109666102c083016102a084016126cb565b606680546001600160a01b0319166001600160a01b03929092169190911790556102c0820135606c556102e0820135606d55610300820135606e556109b160c0830160a084016126cb565b606980546001600160a01b0319166001600160a01b03929092169190911790556109de60208301836126cb565b606880546001600160a01b0319166001600160a01b039283161790556060830135606a556080830135606b5560658054610100600160a81b0319166101008684168102919091179182905560408051630261bf8b60e01b815290519190920490921691630261bf8b916004808201926020929091908290030181865afa158015610a6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9091906129b1565b6069546068546065546040805163033df24d60e31b815290516001600160a01b039586169594851694938416937f4b3932defc851859c0883ec898429ef20ab50bf24355077458d5b5c266d8087593610100900416916319ef92689160048083019260209291908290030181865afa158015610b10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3491906129b1565b606754606654606c54606d54606e54604080516001600160a01b039788168152958716602087015295909316848601526060840191909152608083015260a082015290519081900360c00190a48015610bc7576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b600061057582611593565b600033610be58582856117ca565b610bf085858561183e565b506001949350505050565b610c036115ae565b6001600160a01b0316336001600160a01b0316146040518060400160405280600381526020016203530360ec1b81525090610c515760405162461bcd60e51b81526004016105eb9190612654565b50610c6086868686868661184b565b505050505050565b600080610c736115ae565b606854606954606a54606b546040516352120e2360e01b81529495506001600160a01b038087169563dcc5cded9587956352120e2395610cc09592851694909116929091906004016128fe565b602060405180830381865afa158015610cdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d019190612927565b6040518263ffffffff1660e01b8152600401610d1f91815260200190565b602060405180830381865afa158015610d3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d609190612927565b91505090565b60003361056f818585610d7983836113d8565b610d8391906129e4565b61146f565b600080610d936115ae565b606854606954606a54606b546040516352120e2360e01b81529495506000946001600160a01b03808816956352120e2395610dda95918316949216929091906004016128fe565b602060405180830381865afa158015610df7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1b9190612927565b60405163dcc5cded60e01b8152600481018290529091506000906001600160a01b0384169063dcc5cded90602401602060405180830381865afa158015610e66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8a9190612927565b949350505050565b6000610e9c6115ae565b6001600160a01b0316336001600160a01b0316146040518060400160405280600381526020016203530360ec1b81525090610eea5760405162461bcd60e51b81526004016105eb9190612654565b50606954610f02906001600160a01b03168484611ac0565b50919050565b610f106115ae565b6001600160a01b0316336001600160a01b0316146040518060400160405280600381526020016203530360ec1b81525090610f5e5760405162461bcd60e51b81526004016105eb9190612654565b50610bc7836000808560008661184b565b610f776115ae565b6001600160a01b0316336001600160a01b0316146040518060400160405280600381526020016203530360ec1b81525090610fc55760405162461bcd60e51b81526004016105eb9190612654565b50606e55565b600080610fd66115ae565b606854606954606a54606b546040516352120e2360e01b81529495506110d6946001600160a01b038088169563dcc5cded9587956352120e23956110279593851694909216929091906004016128fe565b602060405180830381865afa158015611044573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110689190612927565b6040518263ffffffff1660e01b815260040161108691815260200190565b602060405180830381865afa1580156110a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c79190612927565b6110d085611593565b90611717565b9392505050565b60006107bd6115ae565b6110ef6115ae565b6001600160a01b0316336001600160a01b0316146040518060400160405280600381526020016203530360ec1b8152509061113d5760405162461bcd60e51b81526004016105eb9190612654565b50606d55565b6060603780546104de906128ca565b6000338161116082866113d8565b9050838110156111c05760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016105eb565b610bf0828686840361146f565b60003361056f81858561183e565b6111e36115ae565b6001600160a01b0316336001600160a01b0316146040518060400160405280600381526020016203530360ec1b815250906112315760405162461bcd60e51b81526004016105eb9190612654565b50606c55565b60006107bd60355490565b61124a6115ae565b6001600160a01b0316336001600160a01b0316146040518060400160405280600381526020016203530360ec1b815250906112985760405162461bcd60e51b81526004016105eb9190612654565b50606680546001600160a01b0319166001600160a01b0392909216919091179055565b6112c36115ae565b6001600160a01b0316336001600160a01b0316146040518060400160405280600381526020016203530360ec1b815250906113115760405162461bcd60e51b81526004016105eb9190612654565b50600061131e8383611627565b6040805180820190915260038152621a981960e91b6020820152909150816113595760405162461bcd60e51b81526004016105eb9190612654565b506113648582611b12565b60695461137b906001600160a01b03168585611ac0565b836001600160a01b0316856001600160a01b03167f5d624aa9c148153ab3446c1b154f660ee7701e549fe9b62dab7171b1c80e6fa285856040516113c9929190918252602082015260400190565b60405180910390a35050505050565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b61140b6115ae565b6001600160a01b0316336001600160a01b0316146040518060400160405280600381526020016203530360ec1b815250906114595760405162461bcd60e51b81526004016105eb9190612654565b5061146b60008060008560008661184b565b5050565b6001600160a01b0383166114d15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016105eb565b6001600160a01b0382166115325760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016105eb565b6001600160a01b0383811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b031660009081526033602052604090205490565b6000606560019054906101000a90046001600160a01b03166001600160a01b0316630261bf8b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611603573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107bd91906129b1565b6000806116356002846129f7565b9050610e8a8361165b611654876b033b2e3c9fd0803ce8000000611b36565b8490611b42565b90611b4e565b600061166c60355490565b9050600061167984611593565b90506116858484611b5a565b600061168f611753565b6001600160a01b031614611711576116a5611753565b6040516318c39f1760e11b81526001600160a01b038681166004830152602482018590526044820184905291909116906331873e2e90606401600060405180830381600087803b1580156116f857600080fd5b505af115801561170c573d6000803e3d6000fd5b505050505b50505050565b60006110d66b033b2e3c9fd0803ce800000061165b6117368686611b36565b61174d60026b033b2e3c9fd0803ce80000006129f7565b90611b42565b6000606560019054906101000a90046001600160a01b03166001600160a01b03166319ef92686040518163ffffffff1660e01b8152600401602060405180830381865afa158015611603573d6000803e3d6000fd5b6117b28383611c09565b6065805460ff191660ff929092169190911790555050565b60006117d684846113d8565b9050600019811461171157818110156118315760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016105eb565b611711848484840361146f565b610bc78383836001611c3a565b82158015611857575081155b610c60576066546067546001600160a01b039182169190811690600090819081908a166118915761188788611e58565b90925090506118a2565b61189a87611e86565b919450925090505b6118b5846118b08389611627565b611661565b6118c3856118b08489611627565b836001600160a01b03168b6001600160a01b0316600080516020612c11833981519152836040516118f691815260200190565b60405180910390a3846001600160a01b03168b6001600160a01b0316600080516020612c118339815191528460405161193191815260200190565b60405180910390a360408051828152602081018890526001600160a01b03861691600080516020612bf1833981519152910160405180910390a260408051838152602081018890526001600160a01b03871691600080516020612bf1833981519152910160405180910390a26001600160a01b038a1615611a28576119ba8a6118b08589611627565b896001600160a01b03168b6001600160a01b0316600080516020612c11833981519152856040516119ed91815260200190565b60405180910390a360408051848152602081018890526001600160a01b038c1691600080516020612bf1833981519152910160405180910390a25b6001600160a01b03891615611ab357611a45896118b08a89611627565b886001600160a01b03168b6001600160a01b0316600080516020612c118339815191528a604051611a7891815260200190565b60405180910390a360408051898152602081018890526001600160a01b038b1691600080516020612bf1833981519152910160405180910390a25b5050505050505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610bc7908490611ee1565b6000611b1d60355490565b90506000611b2a84611593565b90506116858484611fb3565b60006110d68284612a19565b60006110d682846129e4565b60006110d682846129f7565b6001600160a01b038216611bb05760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016105eb565b8060356000828254611bc291906129e4565b90915550506001600160a01b038216600081815260336020908152604080832080548601905551848152600080516020612c11833981519152910160405180910390a35050565b600054610100900460ff16611c305760405162461bcd60e51b81526004016105eb90612a38565b61146b82826120d5565b6000611c446115ae565b606854606954606a54606b546040516352120e2360e01b81529495506000946001600160a01b03808816956352120e2395611c8b95918316949216929091906004016128fe565b602060405180830381865afa158015611ca8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ccc9190612927565b60405163dcc5cded60e01b8152600481018290529091506000906001600160a01b0384169063dcc5cded90602401602060405180830381865afa158015611d17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3b9190612927565b90506000611d4c826110d08a611593565b90506000611d5d836110d08a611593565b9050611d738989611d6e8a87611627565b612115565b8515611df757604051636c130dc760e01b8152600481018590526001600160a01b038a811660248301528981166044830152606482018990526084820184905260a48201839052861690636c130dc79060c40160006040518083038186803b158015611dde57600080fd5b505afa158015611df2573d6000803e3d6000fd5b505050505b876001600160a01b0316896001600160a01b03167f4beccb90f994c31aced7a23b5611020728a23d8ec5cddd1a3e9d97b96fda86668986604051611e45929190918252602082015260400190565b60405180910390a3505050505050505050565b606c54600090819081611e6b8583612267565b90506000611e798287612a83565b9196919550909350505050565b600080600080611ea1606d548661226790919063ffffffff16565b90506000611eba606e548761226790919063ffffffff16565b9050600081611ec98489612a83565b611ed39190612a83565b929791965091945092505050565b6000611f36826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661230f9092919063ffffffff16565b805190915015610bc75780806020019051810190611f549190612a96565b610bc75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016105eb565b6001600160a01b0382166120135760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016105eb565b6001600160a01b038216600090815260336020526040902054818110156120875760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016105eb565b6001600160a01b0383166000818152603360209081526040808320868603905560358054879003905551858152919291600080516020612c11833981519152910160405180910390a3505050565b600054610100900460ff166120fc5760405162461bcd60e51b81526004016105eb90612a38565b60366121088382612b14565b506037610bc78282612b14565b600061212084611593565b9050600061212d84611593565b905061213a85858561231e565b6000612144611753565b6001600160a01b03161461226057600061215d60355490565b9050612167611753565b6040516318c39f1760e11b81526001600160a01b038881166004830152602482018490526044820186905291909116906331873e2e90606401600060405180830381600087803b1580156121ba57600080fd5b505af11580156121ce573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b031614610c60576121f3611753565b6040516318c39f1760e11b81526001600160a01b038781166004830152602482018490526044820185905291909116906331873e2e90606401600060405180830381600087803b15801561224657600080fd5b505af115801561225a573d6000803e3d6000fd5b50505050505b5050505050565b6000821580612274575081155b1561228157506000610575565b8161228f60026127106129f7565b61229b90600019612a83565b6122a591906129f7565b8311156040518060400160405280600381526020016203230360ec1b815250906122e25760405162461bcd60e51b81526004016105eb9190612654565b506127106122f16002826129f7565b6122fb8486612a19565b61230591906129e4565b6110d691906129f7565b6060610e8a84846000856124b7565b6001600160a01b0383166123825760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016105eb565b6001600160a01b0382166123e45760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016105eb565b6001600160a01b0383166000908152603360205260409020548181101561245c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016105eb565b6001600160a01b038085166000818152603360205260408082208686039055928616808252908390208054860190559151600080516020612c11833981519152906124aa9086815260200190565b60405180910390a3611711565b6060824710156125185760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016105eb565b600080866001600160a01b031685876040516125349190612bd4565b60006040518083038185875af1925050503d8060008114612571576040519150601f19603f3d011682016040523d82523d6000602084013e612576565b606091505b509150915061258787838387612592565b979650505050505050565b606083156126015782516000036125fa576001600160a01b0385163b6125fa5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016105eb565b5081610e8a565b610e8a83838151156126165781518083602001fd5b8060405162461bcd60e51b81526004016105eb9190612654565b60005b8381101561264b578181015183820152602001612633565b50506000910152565b6020815260008251806020840152612673816040850160208701612630565b601f01601f19169190910160400192915050565b6001600160a01b038116811461269c57600080fd5b50565b600080604083850312156126b257600080fd5b82356126bd81612687565b946020939093013593505050565b6000602082840312156126dd57600080fd5b81356110d681612687565b6000806000606084860312156126fd57600080fd5b833561270881612687565b95602085013595506040909401359392505050565b6000806040838503121561273057600080fd5b823561273b81612687565b9150602083013567ffffffffffffffff81111561275757600080fd5b8301610340818603121561276a57600080fd5b809150509250929050565b60008060006060848603121561278a57600080fd5b833561279581612687565b925060208401356127a581612687565b929592945050506040919091013590565b60008060008060008060c087890312156127cf57600080fd5b86356127da81612687565b955060208701356127ea81612687565b945060408701356127fa81612687565b959894975094956060810135955060808101359460a0909101359350915050565b60006020828403121561282d57600080fd5b5035919050565b6000806000806080858703121561284a57600080fd5b843561285581612687565b9350602085013561286581612687565b93969395505050506040820135916060013590565b6000806040838503121561288d57600080fd5b823561289881612687565b9150602083013561276a81612687565b600080604083850312156128bb57600080fd5b50508035926020909101359150565b600181811c908216806128de57607f821691505b602082108103610f0257634e487b7160e01b600052602260045260246000fd5b6001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b60006020828403121561293957600080fd5b5051919050565b6000808335601e1984360301811261295757600080fd5b83018035915067ffffffffffffffff82111561297257600080fd5b60200191503681900382131561298757600080fd5b9250929050565b6000602082840312156129a057600080fd5b813560ff811681146110d657600080fd5b6000602082840312156129c357600080fd5b81516110d681612687565b634e487b7160e01b600052601160045260246000fd5b80820180821115610575576105756129ce565b600082612a1457634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612a3357612a336129ce565b500290565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b81810381811115610575576105756129ce565b600060208284031215612aa857600080fd5b815180151581146110d657600080fd5b634e487b7160e01b600052604160045260246000fd5b601f821115610bc757600081815260208120601f850160051c81016020861015612af55750805b601f850160051c820191505b81811015610c6057828155600101612b01565b815167ffffffffffffffff811115612b2e57612b2e612ab8565b612b4281612b3c84546128ca565b84612ace565b602080601f831160018114612b775760008415612b5f5750858301515b600019600386901b1c1916600185901b178555610c60565b600085815260208120601f198616915b82811015612ba657888601518255948401946001909101908401612b87565b5085821015612bc45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008251612be6818460208701612630565b919091019291505056fe4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220803dae48baefc31ac1ca6f12fce04b1028be511e5d6355449d118c23fb9bfd7d64736f6c63430008100033",
    "sourceMap": "1311:22032:158:-:0;;;2129:53;;;;;;;;;-1:-1:-1;2153:22:158;:20;:22::i;:::-;1311:22032;;5928:279:18;5996:13;;;;;;;5995:14;5987:66;;;;-1:-1:-1;;;5987:66:18;;216:2:187;5987:66:18;;;198:21:187;255:2;235:18;;;228:30;294:34;274:18;;;267:62;-1:-1:-1;;;345:18:187;;;338:37;392:19;;5987:66:18;;;;;;;;6067:12;;6082:15;6067:12;;;:30;6063:138;;;6113:12;:30;;-1:-1:-1;;6113:30:18;6128:15;6113:30;;;;;;6162:28;;564:36:187;;;6162:28:18;;552:2:187;537:18;6162:28:18;;;;;;;6063:138;5928:279::o;422:184:187:-;1311:22032:158;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x608060405234801561001057600080fd5b50600436106102325760003560e01c806357f1b83711610130578063acac18e4116100b8578063c35be0171161007c578063c35be01714610486578063d7020d0a1461048e578063dd62ed3e146104a1578063e8f7a1a5146104b4578063f9e2bf6b146104c757600080fd5b8063acac18e414610436578063ae16733514610449578063b16a19de1461045a578063b1bf962d1461046b578063bc1d19dd1461047357600080fd5b80637535d246116100ff5780637535d246146103ed5780637ccd3b46146103f557806395d89b4114610408578063a457c2d714610410578063a9059cbb1461042357600080fd5b806357f1b837146103a3578063679d0095146103b45780636b8465f8146103c757806370a08231146103da57600080fd5b80631da24f3e116101be57806336a722341161018257806336a722341461035c57806339509351146103645780633ba0b9a91461037757806347bec6f01461037f5780634efecaa51461039057600080fd5b80631da24f3e1461030657806323b872dd146103195780632d6aa1281461032c57806330c1e38b14610334578063313ce5671461034757600080fd5b806314ff75c91161020557806314ff75c9146102ae578063156e29f6146102b657806318160ddd146102c957806319ef9268146102d15780631d165564146102f157600080fd5b8063046016081461023757806306fdde031461024e578063095ea7b3146102635780630afbcdc914610286575b600080fd5b606a545b6040519081526020015b60405180910390f35b6102566104cf565b6040516102459190612654565b61027661027136600461269f565b610561565b6040519015158152602001610245565b6102996102943660046126cb565b61057b565b60408051928352602083019190915201610245565b606e5461023b565b6102766102c43660046126e8565b610593565b61023b610690565b6102d96107b3565b6040516001600160a01b039091168152602001610245565b6103046102ff36600461271d565b6107c2565b005b61023b6103143660046126cb565b610bcc565b610276610327366004612775565b610bd7565b606c5461023b565b6103046103423660046127b6565b610bfb565b60655460405160ff9091168152602001610245565b61023b610c68565b61027661037236600461269f565b610d66565b61023b610d88565b6066546001600160a01b03166102d9565b61023b61039e36600461269f565b610e92565b6068546001600160a01b03166102d9565b6103046103c23660046126e8565b610f08565b6103046103d536600461281b565b610f6f565b61023b6103e83660046126cb565b610fcb565b6102d96110dd565b61030461040336600461281b565b6110e7565b610256611143565b61027661041e36600461269f565b611152565b61027661043136600461269f565b6111cd565b61030461044436600461281b565b6111db565b6067546001600160a01b03166102d9565b6069546001600160a01b03166102d9565b61023b611237565b6103046104813660046126cb565b611242565b606b5461023b565b61030461049c366004612834565b6112bb565b61023b6104af36600461287a565b6113d8565b6103046104c23660046128a8565b611403565b606d5461023b565b6060603680546104de906128ca565b80601f016020809104026020016040519081016040528092919081815260200182805461050a906128ca565b80156105575780601f1061052c57610100808354040283529160200191610557565b820191906000526020600020905b81548152906001019060200180831161053a57829003601f168201915b5050505050905090565b60003361056f81858561146f565b60019150505b92915050565b60008061058783611593565b60355491509150915091565b600061059d6115ae565b6001600160a01b0316336001600160a01b0316146040518060400160405280600381526020016203530360ec1b815250906105f45760405162461bcd60e51b81526004016105eb9190612654565b60405180910390fd5b50600061060085611593565b9050600061060e8585611627565b60408051808201909152600381526235303160e81b6020820152909150816106495760405162461bcd60e51b81526004016105eb9190612654565b506106548682611661565b60408051868152602081018690526001600160a01b03881691600080516020612bf1833981519152910160405180910390a25015949350505050565b60008061069b6115ae565b905060006106a860355490565b9050806000036106bb5760009250505090565b606854606954606a54606b546040516352120e2360e01b81526107ac946001600160a01b038881169563dcc5cded9587956352120e239561070595851694909316926004016128fe565b602060405180830381865afa158015610722573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107469190612927565b6040518263ffffffff1660e01b815260040161076491815260200190565b602060405180830381865afa158015610781573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a59190612927565b8290611717565b9250505090565b60006107bd611753565b905090565b600054610100900460ff16158080156107e25750600054600160ff909116105b806107fc5750303b1580156107fc575060005460ff166001145b61085f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016105eb565b6000805460ff191660011790558015610882576000805461ff0019166101001790555b610922610893610140840184612940565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506108d692505050610160850185612940565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061091d925050506101208601610100870161298e565b6117a8565b6109346102a0830161028084016126cb565b606780546001600160a01b0319166001600160a01b03929092169190911790556109666102c083016102a084016126cb565b606680546001600160a01b0319166001600160a01b03929092169190911790556102c0820135606c556102e0820135606d55610300820135606e556109b160c0830160a084016126cb565b606980546001600160a01b0319166001600160a01b03929092169190911790556109de60208301836126cb565b606880546001600160a01b0319166001600160a01b039283161790556060830135606a556080830135606b5560658054610100600160a81b0319166101008684168102919091179182905560408051630261bf8b60e01b815290519190920490921691630261bf8b916004808201926020929091908290030181865afa158015610a6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9091906129b1565b6069546068546065546040805163033df24d60e31b815290516001600160a01b039586169594851694938416937f4b3932defc851859c0883ec898429ef20ab50bf24355077458d5b5c266d8087593610100900416916319ef92689160048083019260209291908290030181865afa158015610b10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3491906129b1565b606754606654606c54606d54606e54604080516001600160a01b039788168152958716602087015295909316848601526060840191909152608083015260a082015290519081900360c00190a48015610bc7576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b600061057582611593565b600033610be58582856117ca565b610bf085858561183e565b506001949350505050565b610c036115ae565b6001600160a01b0316336001600160a01b0316146040518060400160405280600381526020016203530360ec1b81525090610c515760405162461bcd60e51b81526004016105eb9190612654565b50610c6086868686868661184b565b505050505050565b600080610c736115ae565b606854606954606a54606b546040516352120e2360e01b81529495506001600160a01b038087169563dcc5cded9587956352120e2395610cc09592851694909116929091906004016128fe565b602060405180830381865afa158015610cdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d019190612927565b6040518263ffffffff1660e01b8152600401610d1f91815260200190565b602060405180830381865afa158015610d3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d609190612927565b91505090565b60003361056f818585610d7983836113d8565b610d8391906129e4565b61146f565b600080610d936115ae565b606854606954606a54606b546040516352120e2360e01b81529495506000946001600160a01b03808816956352120e2395610dda95918316949216929091906004016128fe565b602060405180830381865afa158015610df7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1b9190612927565b60405163dcc5cded60e01b8152600481018290529091506000906001600160a01b0384169063dcc5cded90602401602060405180830381865afa158015610e66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8a9190612927565b949350505050565b6000610e9c6115ae565b6001600160a01b0316336001600160a01b0316146040518060400160405280600381526020016203530360ec1b81525090610eea5760405162461bcd60e51b81526004016105eb9190612654565b50606954610f02906001600160a01b03168484611ac0565b50919050565b610f106115ae565b6001600160a01b0316336001600160a01b0316146040518060400160405280600381526020016203530360ec1b81525090610f5e5760405162461bcd60e51b81526004016105eb9190612654565b50610bc7836000808560008661184b565b610f776115ae565b6001600160a01b0316336001600160a01b0316146040518060400160405280600381526020016203530360ec1b81525090610fc55760405162461bcd60e51b81526004016105eb9190612654565b50606e55565b600080610fd66115ae565b606854606954606a54606b546040516352120e2360e01b81529495506110d6946001600160a01b038088169563dcc5cded9587956352120e23956110279593851694909216929091906004016128fe565b602060405180830381865afa158015611044573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110689190612927565b6040518263ffffffff1660e01b815260040161108691815260200190565b602060405180830381865afa1580156110a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c79190612927565b6110d085611593565b90611717565b9392505050565b60006107bd6115ae565b6110ef6115ae565b6001600160a01b0316336001600160a01b0316146040518060400160405280600381526020016203530360ec1b8152509061113d5760405162461bcd60e51b81526004016105eb9190612654565b50606d55565b6060603780546104de906128ca565b6000338161116082866113d8565b9050838110156111c05760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016105eb565b610bf0828686840361146f565b60003361056f81858561183e565b6111e36115ae565b6001600160a01b0316336001600160a01b0316146040518060400160405280600381526020016203530360ec1b815250906112315760405162461bcd60e51b81526004016105eb9190612654565b50606c55565b60006107bd60355490565b61124a6115ae565b6001600160a01b0316336001600160a01b0316146040518060400160405280600381526020016203530360ec1b815250906112985760405162461bcd60e51b81526004016105eb9190612654565b50606680546001600160a01b0319166001600160a01b0392909216919091179055565b6112c36115ae565b6001600160a01b0316336001600160a01b0316146040518060400160405280600381526020016203530360ec1b815250906113115760405162461bcd60e51b81526004016105eb9190612654565b50600061131e8383611627565b6040805180820190915260038152621a981960e91b6020820152909150816113595760405162461bcd60e51b81526004016105eb9190612654565b506113648582611b12565b60695461137b906001600160a01b03168585611ac0565b836001600160a01b0316856001600160a01b03167f5d624aa9c148153ab3446c1b154f660ee7701e549fe9b62dab7171b1c80e6fa285856040516113c9929190918252602082015260400190565b60405180910390a35050505050565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b61140b6115ae565b6001600160a01b0316336001600160a01b0316146040518060400160405280600381526020016203530360ec1b815250906114595760405162461bcd60e51b81526004016105eb9190612654565b5061146b60008060008560008661184b565b5050565b6001600160a01b0383166114d15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016105eb565b6001600160a01b0382166115325760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016105eb565b6001600160a01b0383811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b031660009081526033602052604090205490565b6000606560019054906101000a90046001600160a01b03166001600160a01b0316630261bf8b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611603573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107bd91906129b1565b6000806116356002846129f7565b9050610e8a8361165b611654876b033b2e3c9fd0803ce8000000611b36565b8490611b42565b90611b4e565b600061166c60355490565b9050600061167984611593565b90506116858484611b5a565b600061168f611753565b6001600160a01b031614611711576116a5611753565b6040516318c39f1760e11b81526001600160a01b038681166004830152602482018590526044820184905291909116906331873e2e90606401600060405180830381600087803b1580156116f857600080fd5b505af115801561170c573d6000803e3d6000fd5b505050505b50505050565b60006110d66b033b2e3c9fd0803ce800000061165b6117368686611b36565b61174d60026b033b2e3c9fd0803ce80000006129f7565b90611b42565b6000606560019054906101000a90046001600160a01b03166001600160a01b03166319ef92686040518163ffffffff1660e01b8152600401602060405180830381865afa158015611603573d6000803e3d6000fd5b6117b28383611c09565b6065805460ff191660ff929092169190911790555050565b60006117d684846113d8565b9050600019811461171157818110156118315760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016105eb565b611711848484840361146f565b610bc78383836001611c3a565b82158015611857575081155b610c60576066546067546001600160a01b039182169190811690600090819081908a166118915761188788611e58565b90925090506118a2565b61189a87611e86565b919450925090505b6118b5846118b08389611627565b611661565b6118c3856118b08489611627565b836001600160a01b03168b6001600160a01b0316600080516020612c11833981519152836040516118f691815260200190565b60405180910390a3846001600160a01b03168b6001600160a01b0316600080516020612c118339815191528460405161193191815260200190565b60405180910390a360408051828152602081018890526001600160a01b03861691600080516020612bf1833981519152910160405180910390a260408051838152602081018890526001600160a01b03871691600080516020612bf1833981519152910160405180910390a26001600160a01b038a1615611a28576119ba8a6118b08589611627565b896001600160a01b03168b6001600160a01b0316600080516020612c11833981519152856040516119ed91815260200190565b60405180910390a360408051848152602081018890526001600160a01b038c1691600080516020612bf1833981519152910160405180910390a25b6001600160a01b03891615611ab357611a45896118b08a89611627565b886001600160a01b03168b6001600160a01b0316600080516020612c118339815191528a604051611a7891815260200190565b60405180910390a360408051898152602081018890526001600160a01b038b1691600080516020612bf1833981519152910160405180910390a25b5050505050505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610bc7908490611ee1565b6000611b1d60355490565b90506000611b2a84611593565b90506116858484611fb3565b60006110d68284612a19565b60006110d682846129e4565b60006110d682846129f7565b6001600160a01b038216611bb05760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016105eb565b8060356000828254611bc291906129e4565b90915550506001600160a01b038216600081815260336020908152604080832080548601905551848152600080516020612c11833981519152910160405180910390a35050565b600054610100900460ff16611c305760405162461bcd60e51b81526004016105eb90612a38565b61146b82826120d5565b6000611c446115ae565b606854606954606a54606b546040516352120e2360e01b81529495506000946001600160a01b03808816956352120e2395611c8b95918316949216929091906004016128fe565b602060405180830381865afa158015611ca8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ccc9190612927565b60405163dcc5cded60e01b8152600481018290529091506000906001600160a01b0384169063dcc5cded90602401602060405180830381865afa158015611d17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3b9190612927565b90506000611d4c826110d08a611593565b90506000611d5d836110d08a611593565b9050611d738989611d6e8a87611627565b612115565b8515611df757604051636c130dc760e01b8152600481018590526001600160a01b038a811660248301528981166044830152606482018990526084820184905260a48201839052861690636c130dc79060c40160006040518083038186803b158015611dde57600080fd5b505afa158015611df2573d6000803e3d6000fd5b505050505b876001600160a01b0316896001600160a01b03167f4beccb90f994c31aced7a23b5611020728a23d8ec5cddd1a3e9d97b96fda86668986604051611e45929190918252602082015260400190565b60405180910390a3505050505050505050565b606c54600090819081611e6b8583612267565b90506000611e798287612a83565b9196919550909350505050565b600080600080611ea1606d548661226790919063ffffffff16565b90506000611eba606e548761226790919063ffffffff16565b9050600081611ec98489612a83565b611ed39190612a83565b929791965091945092505050565b6000611f36826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661230f9092919063ffffffff16565b805190915015610bc75780806020019051810190611f549190612a96565b610bc75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016105eb565b6001600160a01b0382166120135760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016105eb565b6001600160a01b038216600090815260336020526040902054818110156120875760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016105eb565b6001600160a01b0383166000818152603360209081526040808320868603905560358054879003905551858152919291600080516020612c11833981519152910160405180910390a3505050565b600054610100900460ff166120fc5760405162461bcd60e51b81526004016105eb90612a38565b60366121088382612b14565b506037610bc78282612b14565b600061212084611593565b9050600061212d84611593565b905061213a85858561231e565b6000612144611753565b6001600160a01b03161461226057600061215d60355490565b9050612167611753565b6040516318c39f1760e11b81526001600160a01b038881166004830152602482018490526044820186905291909116906331873e2e90606401600060405180830381600087803b1580156121ba57600080fd5b505af11580156121ce573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b031614610c60576121f3611753565b6040516318c39f1760e11b81526001600160a01b038781166004830152602482018490526044820185905291909116906331873e2e90606401600060405180830381600087803b15801561224657600080fd5b505af115801561225a573d6000803e3d6000fd5b50505050505b5050505050565b6000821580612274575081155b1561228157506000610575565b8161228f60026127106129f7565b61229b90600019612a83565b6122a591906129f7565b8311156040518060400160405280600381526020016203230360ec1b815250906122e25760405162461bcd60e51b81526004016105eb9190612654565b506127106122f16002826129f7565b6122fb8486612a19565b61230591906129e4565b6110d691906129f7565b6060610e8a84846000856124b7565b6001600160a01b0383166123825760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016105eb565b6001600160a01b0382166123e45760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016105eb565b6001600160a01b0383166000908152603360205260409020548181101561245c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016105eb565b6001600160a01b038085166000818152603360205260408082208686039055928616808252908390208054860190559151600080516020612c11833981519152906124aa9086815260200190565b60405180910390a3611711565b6060824710156125185760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016105eb565b600080866001600160a01b031685876040516125349190612bd4565b60006040518083038185875af1925050503d8060008114612571576040519150601f19603f3d011682016040523d82523d6000602084013e612576565b606091505b509150915061258787838387612592565b979650505050505050565b606083156126015782516000036125fa576001600160a01b0385163b6125fa5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016105eb565b5081610e8a565b610e8a83838151156126165781518083602001fd5b8060405162461bcd60e51b81526004016105eb9190612654565b60005b8381101561264b578181015183820152602001612633565b50506000910152565b6020815260008251806020840152612673816040850160208701612630565b601f01601f19169190910160400192915050565b6001600160a01b038116811461269c57600080fd5b50565b600080604083850312156126b257600080fd5b82356126bd81612687565b946020939093013593505050565b6000602082840312156126dd57600080fd5b81356110d681612687565b6000806000606084860312156126fd57600080fd5b833561270881612687565b95602085013595506040909401359392505050565b6000806040838503121561273057600080fd5b823561273b81612687565b9150602083013567ffffffffffffffff81111561275757600080fd5b8301610340818603121561276a57600080fd5b809150509250929050565b60008060006060848603121561278a57600080fd5b833561279581612687565b925060208401356127a581612687565b929592945050506040919091013590565b60008060008060008060c087890312156127cf57600080fd5b86356127da81612687565b955060208701356127ea81612687565b945060408701356127fa81612687565b959894975094956060810135955060808101359460a0909101359350915050565b60006020828403121561282d57600080fd5b5035919050565b6000806000806080858703121561284a57600080fd5b843561285581612687565b9350602085013561286581612687565b93969395505050506040820135916060013590565b6000806040838503121561288d57600080fd5b823561289881612687565b9150602083013561276a81612687565b600080604083850312156128bb57600080fd5b50508035926020909101359150565b600181811c908216806128de57607f821691505b602082108103610f0257634e487b7160e01b600052602260045260246000fd5b6001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b60006020828403121561293957600080fd5b5051919050565b6000808335601e1984360301811261295757600080fd5b83018035915067ffffffffffffffff82111561297257600080fd5b60200191503681900382131561298757600080fd5b9250929050565b6000602082840312156129a057600080fd5b813560ff811681146110d657600080fd5b6000602082840312156129c357600080fd5b81516110d681612687565b634e487b7160e01b600052601160045260246000fd5b80820180821115610575576105756129ce565b600082612a1457634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612a3357612a336129ce565b500290565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b81810381811115610575576105756129ce565b600060208284031215612aa857600080fd5b815180151581146110d657600080fd5b634e487b7160e01b600052604160045260246000fd5b601f821115610bc757600081815260208120601f850160051c81016020861015612af55750805b601f850160051c820191505b81811015610c6057828155600101612b01565b815167ffffffffffffffff811115612b2e57612b2e612ab8565b612b4281612b3c84546128ca565b84612ace565b602080601f831160018114612b775760008415612b5f5750858301515b600019600386901b1c1916600185901b178555610c60565b600085815260208120601f198616915b82811015612ba657888601518255948401946001909101908401612b87565b5085821015612bc45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008251612be6818460208701612630565b919091019291505056fe4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220803dae48baefc31ac1ca6f12fce04b1028be511e5d6355449d118c23fb9bfd7d64736f6c63430008100033",
    "sourceMap": "1311:22032:158:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18380:115;18467:21;;18380:115;;;160:25:187;;;148:2;133:18;18380:115:158;;;;;;;;2491:98:23;;;:::i;:::-;;;;;;;:::i;4768:197::-;;;;;;:::i;:::-;;:::i;:::-;;;1473:14:187;;1466:22;1448:41;;1436:2;1421:18;4768:197:23;1308:187:187;14802:171:158;;;;;;:::i;:::-;;:::i;:::-;;;;1926:25:187;;;1982:2;1967:18;;1960:34;;;;1899:18;14802:171:158;1752:248:187;17542:120:158;17630:25;;17542:120;;4827:478;;;;;;:::i;:::-;;:::i;15204:579::-;;;:::i;19531:152::-;;;:::i;:::-;;;-1:-1:-1;;;;;2592:32:187;;;2574:51;;2562:2;2547:18;19531:152:158;2393:238:187;2274:1186:158;;;;;;:::i;:::-;;:::i;:::-;;14428:125;;;;;;:::i;:::-;;:::i;5527:286:23:-;;;;;;:::i;:::-;;:::i;16963:111:158:-;17049:18;;16963:111;;6339:537;;;;;;:::i;:::-;;:::i;1025:145:163:-;1149:15;;1025:145;;1149:15;;;;4543:36:187;;4531:2;4516:18;1025:145:163;4401:184:187;13734:382:158;;;:::i;6208:234:23:-;;;;;;:::i;:::-;;:::i;16176:410:158:-;;;:::i;16709:98::-;16792:8;;-1:-1:-1;;;;;16792:8:158;16709:98;;19986:259;;;;;;:::i;:::-;;:::i;17970:112::-;18054:21;;-1:-1:-1;;;;;18054:21:158;17970:112;;5927:406;;;;;;:::i;:::-;;:::i;17371:165::-;;;;;;:::i;:::-;;:::i;13276:449::-;;;;;;:::i;:::-;;:::i;18790:92::-;;;:::i;17080:161::-;;;;;;:::i;:::-;;:::i;2702:102:23:-;;;:::i;6929:427::-;;;;;;:::i;:::-;;:::i;4064:189::-;;;;;;:::i;:::-;;:::i;16813:144:158:-;;;;;;:::i;:::-;;:::i;17775:99::-;17858:9;;-1:-1:-1;;;;;17858:9:158;17775:99;;18173:111;18261:16;;-1:-1:-1;;;;;18261:16:158;18173:111;;15941:119;;;:::i;16592:111::-;;;;;;:::i;:::-;;:::i;18591:115::-;18678:21;;18591:115;;3926:507;;;;;;:::i;:::-;;:::i;4311:149:23:-;;;;;;:::i;:::-;;:::i;5526:395:158:-;;;;;;:::i;:::-;;:::i;17247:118::-;17334:24;;17247:118;;2491:98:23;2545:13;2577:5;2570:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2491:98;:::o;4768:197::-;4851:4;929:10:33;4905:32:23;929:10:33;4921:7:23;4930:6;4905:8;:32::i;:::-;4954:4;4947:11;;;4768:197;;;;;:::o;14802:171:158:-;14887:7;14896;14923:21;14939:4;14923:15;:21::i;:::-;3666:12:23;;14915:51:158;;;;14802:171;;;:::o;4827:478::-;4995:4;1994:17;:15;:17::i;:::-;-1:-1:-1;;;;;1970:42:158;929:10:33;-1:-1:-1;;;;;1970:42:158;;2014:37;;;;;;;;;;;;;-1:-1:-1;;;2014:37:158;;;1962:90;;;;;-1:-1:-1;;;1962:90:158;;;;;;;;:::i;:::-;;;;;;;;;;5016:23:::1;5042:21;5058:4;5042:15;:21::i;:::-;5016:47:::0;-1:-1:-1;5074:20:158::1;5097;:6:::0;5111:5;5097:13:::1;:20::i;:::-;5154:29;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;5154:29:158::1;::::0;::::1;::::0;5074:43;;-1:-1:-1;5135:17:158;5127:57:::1;;;;-1:-1:-1::0;;;5127:57:158::1;;;;;;;;:::i;:::-;;5194:25;5200:4;5206:12;5194:5;:25::i;:::-;5235;::::0;;1926::187;;;1982:2;1967:18;;1960:34;;;-1:-1:-1;;;;;5235:25:158;::::1;::::0;-1:-1:-1;;;;;;;;;;;5235:25:158;1899:18:187;5235:25:158::1;;;;;;;-1:-1:-1::0;5278:20:158;;4827:478;-1:-1:-1;;;;4827:478:158:o;15204:579::-;15295:7;15314:17;15334;:15;:17::i;:::-;15314:37;;15370:27;15400:19;3666:12:23;;;3579:106;15400:19:158;15370:49;;15434:19;15457:1;15434:24;15430:63;;15481:1;15474:8;;;;15204:579;:::o;15430:63::-;15617:21;;15657:16;;15691:21;;15730;;15582:183;;-1:-1:-1;;;15582:183:158;;15510:266;;-1:-1:-1;;;;;15537:31:158;;;;;;;;15582:17;;:183;;15617:21;;;15657:16;;;;15582:183;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15537:238;;;;;;;;;;;;;160:25:187;;148:2;133:18;;14:177;15537:238:158;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15510:19;;:26;:266::i;:::-;15503:273;;;;15204:579;:::o;19531:152::-;19602:25;19646:30;:28;:30::i;:::-;19639:37;;19531:152;:::o;2274:1186::-;3268:19:18;3291:13;;;;;;3290:14;;3336:34;;;;-1:-1:-1;3354:12:18;;3369:1;3354:12;;;;:16;3336:34;3335:108;;;-1:-1:-1;3415:4:18;1476:19:32;:23;;;3376:66:18;;-1:-1:-1;3425:12:18;;;;;:17;3376:66;3314:201;;;;-1:-1:-1;;;3314:201:18;;7617:2:187;3314:201:18;;;7599:21:187;7656:2;7636:18;;;7629:30;7695:34;7675:18;;;7668:62;-1:-1:-1;;;7746:18:187;;;7739:44;7800:19;;3314:201:18;7415:410:187;3314:201:18;3525:12;:16;;-1:-1:-1;;3525:16:18;3540:1;3525:16;;;3551:65;;;;3585:13;:20;;-1:-1:-1;;3585:20:18;;;;;3551:65;2463:93:158::1;2488:16;;::::0;::::1;:5:::0;:16:::1;:::i;:::-;2463:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;2506:18:158::1;::::0;-1:-1:-1;;;2506:18:158::1;::::0;::::1;::::0;::::1;:::i;:::-;2463:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;2526:29:158::1;::::0;-1:-1:-1;;;2526:29:158;;;::::1;::::0;::::1;;:::i;:::-;2463:24;:93::i;:::-;2579:14;::::0;;;::::1;::::0;::::1;;:::i;:::-;2567:9;:26:::0;;-1:-1:-1;;;;;;2567:26:158::1;-1:-1:-1::0;;;;;2567:26:158;;;::::1;::::0;;;::::1;::::0;;2614:13:::1;::::0;;;::::1;::::0;::::1;;:::i;:::-;2603:8;:24:::0;;-1:-1:-1;;;;;;2603:24:158::1;-1:-1:-1::0;;;;;2603:24:158;;;::::1;::::0;;;::::1;::::0;;2658:23:::1;::::0;::::1;;2637:18;:44:::0;2718:29:::1;::::0;::::1;;2691:24;:56:::0;2785:30:::1;::::0;::::1;;2757:25;:58:::0;2844:21:::1;::::0;;;::::1;::::0;::::1;;:::i;:::-;2825:16;:40:::0;;-1:-1:-1;;;;;;2825:40:158::1;-1:-1:-1::0;;;;;2825:40:158;;;::::1;::::0;;;::::1;::::0;;2899:26:::1;;::::0;::::1;::::0;::::1;:::i;:::-;2875:21;:50:::0;;-1:-1:-1;;;;;;2875:50:158::1;-1:-1:-1::0;;;;;2875:50:158;;::::1;;::::0;;2959:26:::1;::::0;::::1;;2935:21;:50:::0;3019:26:::1;::::0;::::1;;2995:21;:50:::0;3055:16:::1;:34:::0;;-1:-1:-1;;;;;;3055:34:158::1;2875:50;3055:34:::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;3196:33:::1;::::0;;-1:-1:-1;;;3196:33:158;;;;:16;;;::::1;::::0;;::::1;::::0;:31:::1;::::0;:33:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;:16;:33:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3166:16;::::0;3131:21:::1;::::0;3243:16:::1;::::0;:46:::1;::::0;;-1:-1:-1;;;3243:46:158;;;;-1:-1:-1;;;;;3106:347:158;;::::1;::::0;3166:16;;::::1;::::0;3131:21;;::::1;::::0;3106:347:::1;::::0;3166:16:::1;3243::::0;::::1;;::::0;:44:::1;::::0;:46:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:16;:46:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3303:9;::::0;3326:8:::1;::::0;3348:18:::1;::::0;3380:24:::1;::::0;3418:25:::1;::::0;3106:347:::1;::::0;;-1:-1:-1;;;;;9230:15:187;;;9212:34;;3303:9:158;;::::1;9277:2:187::0;9262:18;;9255:43;3326:8:158;;;::::1;9314:18:187::0;;;9307:43;9381:2;9366:18;;9359:34;;;;9424:3;9409:19;;9402:35;9192:3;9453:19;;9446:35;3106:347:158;;;;;;9161:3:187;3106:347:158;;::::1;3640:14:18::0;3636:99;;;3686:5;3670:21;;-1:-1:-1;;3670:21:18;;;3710:14;;-1:-1:-1;4543:36:187;;3710:14:18;;4531:2:187;4516:18;3710:14:18;;;;;;;3636:99;3258:483;2274:1186:158;;:::o;14428:125::-;14499:7;14525:21;14541:4;14525:15;:21::i;5527:286:23:-;5654:4;929:10:33;5710:38:23;5726:4;929:10:33;5741:6:23;5710:15;:38::i;:::-;5758:27;5768:4;5774:2;5778:6;5758:9;:27::i;:::-;-1:-1:-1;5802:4:23;;5527:286;-1:-1:-1;;;;5527:286:23:o;6339:537:158:-;1994:17;:15;:17::i;:::-;-1:-1:-1;;;;;1970:42:158;929:10:33;-1:-1:-1;;;;;1970:42:158;;2014:37;;;;;;;;;;;;;-1:-1:-1;;;2014:37:158;;;1962:90;;;;;-1:-1:-1;;;1962:90:158;;;;;;;;:::i;:::-;;6613:256:::1;6646:4;6681:6;6718:5;6754:6;6791:14;6836:5;6613:19;:256::i;:::-;6339:537:::0;;;;;;:::o;13734:382::-;13798:7;13817:17;13837;:15;:17::i;:::-;13951:21;;13991:16;;14025:21;;14064;;13916:183;;-1:-1:-1;;;13916:183:158;;13817:37;;-1:-1:-1;;;;;;13871:31:158;;;;;;;;13916:17;;:183;;13951:21;;;;13991:16;;;;14025:21;;14064;13916:183;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13871:238;;;;;;;;;;;;;160:25:187;;148:2;133:18;;14:177;13871:238:158;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13864:245;;;13734:382;:::o;6208:234:23:-;6296:4;929:10:33;6350:64:23;929:10:33;6366:7:23;6403:10;6375:25;929:10:33;6366:7:23;6375:9;:25::i;:::-;:38;;;;:::i;:::-;6350:8;:64::i;16176:410:158:-;16238:7;16257:17;16277;:15;:17::i;:::-;16356:21;;16392:16;;16422:21;;16457;;16325:163;;-1:-1:-1;;;16325:163:158;;16257:37;;-1:-1:-1;16305:17:158;;-1:-1:-1;;;;;16325:17:158;;;;;;:163;;16356:21;;;;16392:16;;;16422:21;;16457;16325:163;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16515:42;;-1:-1:-1;;;16515:42:158;;;;;160:25:187;;;16305:183:158;;-1:-1:-1;16499:13:158;;-1:-1:-1;;;;;16515:31:158;;;;;133:18:187;;16515:42:158;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16499:58;16176:410;-1:-1:-1;;;;16176:410:158:o;19986:259::-;20127:7;1994:17;:15;:17::i;:::-;-1:-1:-1;;;;;1970:42:158;929:10:33;-1:-1:-1;;;;;1970:42:158;;2014:37;;;;;;;;;;;;;-1:-1:-1;;;2014:37:158;;;1962:90;;;;;-1:-1:-1;;;1962:90:158;;;;;;;;:::i;:::-;-1:-1:-1;20169:16:158::1;::::0;20151:64:::1;::::0;-1:-1:-1;;;;;20169:16:158::1;20200:6:::0;20208;20151:48:::1;:64::i;:::-;-1:-1:-1::0;20232:6:158;19986:259;-1:-1:-1;19986:259:158:o;5927:406::-;1994:17;:15;:17::i;:::-;-1:-1:-1;;;;;1970:42:158;929:10:33;-1:-1:-1;;;;;1970:42:158;;2014:37;;;;;;;;;;;;;-1:-1:-1;;;2014:37:158;;;1962:90;;;;;-1:-1:-1;;;1962:90:158;;;;;;;;:::i;:::-;;6094:232:::1;6127:4;6166:1;6199::::0;6223:6:::1;6256:1;6297:5;6094:19;:232::i;17371:165::-:0;1994:17;:15;:17::i;:::-;-1:-1:-1;;;;;1970:42:158;929:10:33;-1:-1:-1;;;;;1970:42:158;;2014:37;;;;;;;;;;;;;-1:-1:-1;;;2014:37:158;;;1962:90;;;;;-1:-1:-1;;;1962:90:158;;;;;;;;:::i;:::-;-1:-1:-1;17477:25:158::1;:52:::0;17371:165::o;13276:449::-;13377:7;13396:17;13416;:15;:17::i;:::-;13559:21;;13599:16;;13633:21;;13672;;13524:183;;-1:-1:-1;;;13524:183:158;;13396:37;;-1:-1:-1;13450:268:158;;-1:-1:-1;;;;;13479:31:158;;;;;;;;13524:17;;:183;;13559:21;;;;13599:16;;;;13633:21;;13672;13524:183;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13479:238;;;;;;;;;;;;;160:25:187;;148:2;133:18;;14:177;13479:238:158;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13450:21;13466:4;13450:15;:21::i;:::-;:28;;:268::i;:::-;13443:275;13276:449;-1:-1:-1;;;13276:449:158:o;18790:92::-;18827:12;18858:17;:15;:17::i;17080:161::-;1994:17;:15;:17::i;:::-;-1:-1:-1;;;;;1970:42:158;929:10:33;-1:-1:-1;;;;;1970:42:158;;2014:37;;;;;;;;;;;;;-1:-1:-1;;;2014:37:158;;;1962:90;;;;;-1:-1:-1;;;1962:90:158;;;;;;;;:::i;:::-;-1:-1:-1;17184:24:158::1;:50:::0;17080:161::o;2702:102:23:-;2758:13;2790:7;2783:14;;;;;:::i;6929:427::-;7022:4;929:10:33;7022:4:23;7103:25;929:10:33;7120:7:23;7103:9;:25::i;:::-;7076:52;;7166:15;7146:16;:35;;7138:85;;;;-1:-1:-1;;;7138:85:23;;10155:2:187;7138:85:23;;;10137:21:187;10194:2;10174:18;;;10167:30;10233:34;10213:18;;;10206:62;-1:-1:-1;;;10284:18:187;;;10277:35;10329:19;;7138:85:23;9953:401:187;7138:85:23;7257:60;7266:5;7273:7;7301:15;7282:16;:34;7257:8;:60::i;4064:189::-;4143:4;929:10:33;4197:28:23;929:10:33;4214:2:23;4218:6;4197:9;:28::i;16813:144:158:-;1994:17;:15;:17::i;:::-;-1:-1:-1;;;;;1970:42:158;929:10:33;-1:-1:-1;;;;;1970:42:158;;2014:37;;;;;;;;;;;;;-1:-1:-1;;;2014:37:158;;;1962:90;;;;;-1:-1:-1;;;1962:90:158;;;;;;;;:::i;:::-;-1:-1:-1;16912:18:158::1;:38:::0;16813:144::o;15941:119::-;16008:7;16034:19;3666:12:23;;;3579:106;16592:111:158;1994:17;:15;:17::i;:::-;-1:-1:-1;;;;;1970:42:158;929:10:33;-1:-1:-1;;;;;1970:42:158;;2014:37;;;;;;;;;;;;;-1:-1:-1;;;2014:37:158;;;1962:90;;;;;-1:-1:-1;;;1962:90:158;;;;;;;;:::i;:::-;-1:-1:-1;16678:8:158::1;:18:::0;;-1:-1:-1;;;;;;16678:18:158::1;-1:-1:-1::0;;;;;16678:18:158;;;::::1;::::0;;;::::1;::::0;;16592:111::o;3926:507::-;1994:17;:15;:17::i;:::-;-1:-1:-1;;;;;1970:42:158;929:10:33;-1:-1:-1;;;;;1970:42:158;;2014:37;;;;;;;;;;;;;-1:-1:-1;;;2014:37:158;;;1962:90;;;;;-1:-1:-1;;;1962:90:158;;;;;;;;:::i;:::-;-1:-1:-1;4129:20:158::1;4152;:6:::0;4166:5;4152:13:::1;:20::i;:::-;4209:29;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;4209:29:158::1;::::0;::::1;::::0;4129:43;;-1:-1:-1;4190:17:158;4182:57:::1;;;;-1:-1:-1::0;;;4182:57:158::1;;;;;;;;:::i;:::-;;4249:25;4255:4;4261:12;4249:5;:25::i;:::-;4303:16;::::0;4285:78:::1;::::0;-1:-1:-1;;;;;4303:16:158::1;4334:20:::0;4356:6;4285:48:::1;:78::i;:::-;4390:20;-1:-1:-1::0;;;;;4379:47:158::1;4384:4;-1:-1:-1::0;;;;;4379:47:158::1;;4412:6;4420:5;4379:47;;;;;;1926:25:187::0;;;1982:2;1967:18;;1960:34;1914:2;1899:18;;1752:248;4379:47:158::1;;;;;;;;4119:314;3926:507:::0;;;;:::o;4311:149:23:-;-1:-1:-1;;;;;4426:18:23;;;4400:7;4426:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4311:149::o;5526:395:158:-;1994:17;:15;:17::i;:::-;-1:-1:-1;;;;;1970:42:158;929:10:33;-1:-1:-1;;;;;1970:42:158;;2014:37;;;;;;;;;;;;;-1:-1:-1;;;2014:37:158;;;1962:90;;;;;-1:-1:-1;;;1962:90:158;;;;;;;;:::i;:::-;;5682:232:::1;5723:1;5754::::0;5787::::1;5811:6;5844:1;5885:5;5682:19;:232::i;:::-;5526:395:::0;;:::o;10841:370:23:-;-1:-1:-1;;;;;10972:19:23;;10964:68;;;;-1:-1:-1;;;10964:68:23;;10561:2:187;10964:68:23;;;10543:21:187;10600:2;10580:18;;;10573:30;10639:34;10619:18;;;10612:62;-1:-1:-1;;;10690:18:187;;;10683:34;10734:19;;10964:68:23;10359:400:187;10964:68:23;-1:-1:-1;;;;;11050:21:23;;11042:68;;;;-1:-1:-1;;;11042:68:23;;10966:2:187;11042:68:23;;;10948:21:187;11005:2;10985:18;;;10978:30;11044:34;11024:18;;;11017:62;-1:-1:-1;;;11095:18:187;;;11088:32;11137:19;;11042:68:23;10764:398:187;11042:68:23;-1:-1:-1;;;;;11121:18:23;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;11172:32;;160:25:187;;;11172:32:23;;133:18:187;11172:32:23;;;;;;;10841:370;;;:::o;3743:125::-;-1:-1:-1;;;;;3843:18:23;3817:7;3843:18;;;:9;:18;;;;;;;3743:125::o;20251:135:158:-;20301:12;20345:16;;;;;;;;;-1:-1:-1;;;;;20345:16:158;-1:-1:-1;;;;;20345:31:158;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1425:158:146:-;1486:7;;1522:5;1526:1;1522;:5;:::i;:::-;1506:21;-1:-1:-1;1547:28:146;1573:1;1547:21;1557:10;:1;524:4;1557:5;:10::i;:::-;1547:5;;:9;:21::i;:::-;:25;;:28::i;2233:398:163:-;2314:22;2339:19;3666:12:23;;;3579:106;2339:19:163;2314:44;;2365:25;2393:24;2409:7;2393:15;:24::i;:::-;2365:52;;2426:28;2438:7;2447:6;2426:11;:28::i;:::-;2518:1;2475:30;:28;:30::i;:::-;-1:-1:-1;;;;;2467:53:163;;2463:163;;2531:30;:28;:30::i;:::-;:87;;-1:-1:-1;;;2531:87:163;;-1:-1:-1;;;;;11609:32:187;;;2531:87:163;;;11591:51:187;11658:18;;;11651:34;;;11701:18;;;11694:34;;;2531:43:163;;;;;;;11564:18:187;;2531:87:163;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2463:163;2307:324;;2233:398;;:::o;1291:126:146:-;1352:7;1379:30;524:4;1379:21;1391:8;:1;1397;1391:5;:8::i;:::-;571:7;577:1;524:4;571:7;:::i;:::-;1379:11;;:21::i;18988:197:158:-;19060:25;19130:16;;;;;;;;;-1:-1:-1;;;;;19130:16:158;-1:-1:-1;;;;;19130:44:158;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;758:201:163;889:28;902:5;909:7;889:12;:28::i;:::-;926:15;:27;;-1:-1:-1;;926:27:163;;;;;;;;;;;;-1:-1:-1;;758:201:163:o;11492:441:23:-;11622:24;11649:25;11659:5;11666:7;11649:9;:25::i;:::-;11622:52;;-1:-1:-1;;11688:16:23;:37;11684:243;;11769:6;11749:16;:26;;11741:68;;;;-1:-1:-1;;;11741:68:23;;11941:2:187;11741:68:23;;;11923:21:187;11980:2;11960:18;;;11953:30;12019:31;11999:18;;;11992:59;12068:18;;11741:68:23;11739:353:187;11741:68:23;11851:51;11860:5;11867:7;11895:6;11876:16;:25;11851:8;:51::i;22088:152:158:-;22200:33;22210:4;22216:2;22220:6;22228:4;22200:9;:33::i;7162:1885::-;7387:11;;:34;;;;-1:-1:-1;7402:19:158;;7387:34;7437:7;7383:71;7482:8;;7519:9;;-1:-1:-1;;;;;7482:8:158;;;;7519:9;;;;7464:15;;;;;;7638:20;;7634:345;;7734:25;7752:6;7734:17;:25::i;:::-;7700:59;;-1:-1:-1;7700:59:158;-1:-1:-1;7634:345:158;;;7926:42;7953:14;7926:26;:42::i;:::-;7814:154;;-1:-1:-1;7814:154:158;-1:-1:-1;7814:154:158;-1:-1:-1;7634:345:158;8318:45;8324:8;8334:28;:14;8356:5;8334:21;:28::i;:::-;8318:5;:45::i;:::-;8373:43;8379:7;8388:27;:13;8409:5;8388:20;:27::i;8373:43::-;8455:8;-1:-1:-1;;;;;8440:40:158;8449:4;-1:-1:-1;;;;;8440:40:158;-1:-1:-1;;;;;;;;;;;8465:14:158;8440:40;;;;160:25:187;;148:2;133:18;;14:177;8440:40:158;;;;;;;;8510:7;-1:-1:-1;;;;;8495:38:158;8504:4;-1:-1:-1;;;;;8495:38:158;-1:-1:-1;;;;;;;;;;;8519:13:158;8495:38;;;;160:25:187;;148:2;133:18;;14:177;8495:38:158;;;;;;;;8557:37;;;1926:25:187;;;1982:2;1967:18;;1960:34;;;-1:-1:-1;;;;;8557:37:158;;;-1:-1:-1;;;;;;;;;;;8557:37:158;1899:18:187;8557:37:158;;;;;;;8609:35;;;1926:25:187;;;1982:2;1967:18;;1960:34;;;-1:-1:-1;;;;;8609:35:158;;;-1:-1:-1;;;;;;;;;;;8609:35:158;1899:18:187;8609:35:158;;;;;;;-1:-1:-1;;;;;8659:20:158;;;8655:199;;8695:41;8701:6;8709:26;:12;8729:5;8709:19;:26::i;8695:41::-;8770:6;-1:-1:-1;;;;;8755:36:158;8764:4;-1:-1:-1;;;;;8755:36:158;-1:-1:-1;;;;;;;;;;;8778:12:158;8755:36;;;;160:25:187;;148:2;133:18;;14:177;8755:36:158;;;;;;;;8810:33;;;1926:25:187;;;1982:2;1967:18;;1960:34;;;-1:-1:-1;;;;;8810:33:158;;;-1:-1:-1;;;;;;;;;;;8810:33:158;1899:18:187;8810:33:158;;;;;;;8655:199;-1:-1:-1;;;;;8868:19:158;;;8864:177;;8903:34;8909:5;8916:20;:6;8930:5;8916:13;:20::i;8903:34::-;8971:5;-1:-1:-1;;;;;8956:29:158;8965:4;-1:-1:-1;;;;;8956:29:158;-1:-1:-1;;;;;;;;;;;8978:6:158;8956:29;;;;160:25:187;;148:2;133:18;;14:177;8956:29:158;;;;;;;;9004:26;;;1926:25:187;;;1982:2;1967:18;;1960:34;;;-1:-1:-1;;;;;9004:26:158;;;-1:-1:-1;;;;;;;;;;;9004:26:158;1899:18:187;9004:26:158;;;;;;;8864:177;7373:1674;;;;;7162:1885;;;;;;:::o;818:216:27:-;968:58;;;-1:-1:-1;;;;;12289:32:187;;968:58:27;;;12271:51:187;12338:18;;;;12331:34;;;968:58:27;;;;;;;;;;12244:18:187;;;;968:58:27;;;;;;;;-1:-1:-1;;;;;968:58:27;-1:-1:-1;;;968:58:27;;;941:86;;961:5;;941:19;:86::i;2637:398:163:-;2718:22;2743:19;3666:12:23;;;3579:106;2743:19:163;2718:44;;2769:25;2797:24;2813:7;2797:15;:24::i;:::-;2769:52;;2830:28;2842:7;2851:6;2830:11;:28::i;3465:96:71:-;3523:7;3549:5;3553:1;3549;:5;:::i;2755:96::-;2813:7;2839:5;2843:1;2839;:5;:::i;3850:96::-;3908:7;3934:5;3938:1;3934;:5;:::i;8904:535:23:-;-1:-1:-1;;;;;8987:21:23;;8979:65;;;;-1:-1:-1;;;8979:65:23;;12751:2:187;8979:65:23;;;12733:21:187;12790:2;12770:18;;;12763:30;12829:33;12809:18;;;12802:61;12880:18;;8979:65:23;12549:355:187;8979:65:23;9131:6;9115:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;9283:18:23;;;;;;:9;:18;;;;;;;;:28;;;;;;9336:37;160:25:187;;;-1:-1:-1;;;;;;;;;;;9336:37:23;133:18:187;9336:37:23;;;;;;;5526:395:158;;:::o;2114:147:23:-;5363:13:18;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:18;;;;;;;:::i;:::-;2216:38:23::1;2239:5;2246:7;2216:22;:38::i;20885:962:158:-:0;21018:17;21038;:15;:17::i;:::-;21117:21;;21153:16;;21183:21;;21218;;21086:163;;-1:-1:-1;;;21086:163:158;;21018:37;;-1:-1:-1;21066:17:158;;-1:-1:-1;;;;;21086:17:158;;;;;;:163;;21117:21;;;;21153:16;;;21183:21;;21218;21086:163;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21276:42;;-1:-1:-1;;;21276:42:158;;;;;160:25:187;;;21066:183:158;;-1:-1:-1;21260:13:158;;-1:-1:-1;;;;;21276:31:158;;;;;133:18:187;;21276:42:158;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21260:58;;21337:25;21365:35;21394:5;21365:21;21381:4;21365:15;:21::i;:35::-;21337:63;;21410:23;21436:33;21463:5;21436:19;21452:2;21436:15;:19::i;:33::-;21410:59;-1:-1:-1;21488:47:158;21504:4;21510:2;21514:20;:6;21528:5;21514:13;:20::i;:::-;21488:15;:47::i;:::-;21550:8;21546:239;;;21574:200;;-1:-1:-1;;;21574:200:158;;;;;13608:25:187;;;-1:-1:-1;;;;;13707:15:187;;;13687:18;;;13680:43;13759:15;;;13739:18;;;13732:43;13791:18;;;13784:34;;;13834:19;;;13827:35;;;13878:19;;;13871:35;;;21574:21:158;;;;;13580:19:187;;21574:200:158;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21546:239;21822:2;-1:-1:-1;;;;;21800:40:158;21816:4;-1:-1:-1;;;;;21800:40:158;;21826:6;21834:5;21800:40;;;;;;1926:25:187;;;1982:2;1967:18;;1960:34;1914:2;1899:18;;1752:248;21800:40:158;;;;;;;;21008:839;;;;;20885:962;;;;:::o;22385:332::-;22507:18;;22451:7;;;;;22568:36;:6;22507:18;22568:17;:36::i;:::-;22544:60;-1:-1:-1;22614:22:158;22639;22544:60;22639:6;:22;:::i;:::-;22680:13;;22614:47;;-1:-1:-1;22385:332:158;;-1:-1:-1;;;;22385:332:158:o;22862:478::-;22937:7;22946;22955;22982:20;23005:43;23023:24;;23005:6;:17;;:43;;;;:::i;:::-;22982:66;;23093:21;23117:44;23135:25;;23117:6;:17;;:44;;;;:::i;:::-;23093:68;-1:-1:-1;23208:22:158;23093:68;23233:21;23242:12;23233:6;:21;:::i;:::-;:37;;;;:::i;:::-;23289:12;;23303:13;;-1:-1:-1;23289:12:158;;-1:-1:-1;22862:478:158;-1:-1:-1;;;22862:478:158:o;3868:717:27:-;4298:23;4324:69;4352:4;4324:69;;;;;;;;;;;;;;;;;4332:5;-1:-1:-1;;;;;4324:27:27;;;:69;;;;;:::i;:::-;4407:17;;4298:95;;-1:-1:-1;4407:21:27;4403:176;;4502:10;4491:30;;;;;;;;;;;;:::i;:::-;4483:85;;;;-1:-1:-1;;;4483:85:27;;14534:2:187;4483:85:27;;;14516:21:187;14573:2;14553:18;;;14546:30;14612:34;14592:18;;;14585:62;-1:-1:-1;;;14663:18:187;;;14656:40;14713:19;;4483:85:27;14332:406:187;9759:659:23;-1:-1:-1;;;;;9842:21:23;;9834:67;;;;-1:-1:-1;;;9834:67:23;;14945:2:187;9834:67:23;;;14927:21:187;14984:2;14964:18;;;14957:30;15023:34;15003:18;;;14996:62;-1:-1:-1;;;15074:18:187;;;15067:31;15115:19;;9834:67:23;14743:397:187;9834:67:23;-1:-1:-1;;;;;9997:18:23;;9972:22;9997:18;;;:9;:18;;;;;;10033:24;;;;10025:71;;;;-1:-1:-1;;;10025:71:23;;15347:2:187;10025:71:23;;;15329:21:187;15386:2;15366:18;;;15359:30;15425:34;15405:18;;;15398:62;-1:-1:-1;;;15476:18:187;;;15469:32;15518:19;;10025:71:23;15145:398:187;10025:71:23;-1:-1:-1;;;;;10130:18:23;;;;;;:9;:18;;;;;;;;10151:23;;;10130:44;;10267:12;:22;;;;;;;10315:37;160:25:187;;;10130:18:23;;;-1:-1:-1;;;;;;;;;;;10315:37:23;133:18:187;10315:37:23;;;;;;;3258:483:18;2274:1186:158;;:::o;2267:159:23:-;5363:13:18;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:18;;;;;;;:::i;:::-;2379:5:23::1;:13;2387:5:::0;2379;:13:::1;:::i;:::-;-1:-1:-1::0;2402:7:23::1;:17;2412:7:::0;2402;:17:::1;:::i;1555:672:163:-:0;1678:24;1705:23;1721:6;1705:15;:23::i;:::-;1678:50;;1735:27;1765:26;1781:9;1765:15;:26::i;:::-;1735:56;;1800:42;1816:6;1824:9;1835:6;1800:15;:42::i;:::-;1906:1;1863:30;:28;:30::i;:::-;-1:-1:-1;;;;;1855:53:163;;1851:371;;1919:26;1948:19;3666:12:23;;;3579:106;1948:19:163;1919:48;;1976:30;:28;:30::i;:::-;:89;;-1:-1:-1;;;1976:89:163;;-1:-1:-1;;;;;11609:32:187;;;1976:89:163;;;11591:51:187;11658:18;;;11651:34;;;11701:18;;;11694:34;;;1976:43:163;;;;;;;11564:18:187;;1976:89:163;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2088:9;-1:-1:-1;;;;;2078:19:163;:6;-1:-1:-1;;;;;2078:19:163;;2074:141;;2110:30;:28;:30::i;:::-;:95;;-1:-1:-1;;;2110:95:163;;-1:-1:-1;;;;;11609:32:187;;;2110:95:163;;;11591:51:187;11658:18;;;11651:34;;;11701:18;;;11694:34;;;2110:43:163;;;;;;;11564:18:187;;2110:95:163;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1910:312;1851:371;1671:556;;1555:672;;;:::o;1026:333:145:-;1104:7;1123:10;;;:29;;-1:-1:-1;1137:15:145;;1123:29;1119:58;;;-1:-1:-1;1169:1:145;1162:8;;1119:58;1237:10;540:21;560:1;470:3;540:21;:::i;:::-;1201:32;;-1:-1:-1;;1201:32:145;:::i;:::-;1200:47;;;;:::i;:::-;1191:5;:56;;1249:35;;;;;;;;;;;;;-1:-1:-1;;;1249:35:145;;;1183:102;;;;;-1:-1:-1;;;1183:102:145;;;;;;;;:::i;:::-;-1:-1:-1;470:3:145;540:21;560:1;470:3;540:21;:::i;:::-;1300:18;1308:10;1300:5;:18;:::i;:::-;:33;;;;:::i;:::-;1299:55;;;;:::i;3884:223:32:-;4017:12;4048:52;4070:6;4078:4;4084:1;4087:12;4048:21;:52::i;7810:818:23:-;-1:-1:-1;;;;;7936:18:23;;7928:68;;;;-1:-1:-1;;;7928:68:23;;18086:2:187;7928:68:23;;;18068:21:187;18125:2;18105:18;;;18098:30;18164:34;18144:18;;;18137:62;-1:-1:-1;;;18215:18:187;;;18208:35;18260:19;;7928:68:23;17884:401:187;7928:68:23;-1:-1:-1;;;;;8014:16:23;;8006:64;;;;-1:-1:-1;;;8006:64:23;;18492:2:187;8006:64:23;;;18474:21:187;18531:2;18511:18;;;18504:30;18570:34;18550:18;;;18543:62;-1:-1:-1;;;18621:18:187;;;18614:33;18664:19;;8006:64:23;18290:399:187;8006:64:23;-1:-1:-1;;;;;8152:15:23;;8130:19;8152:15;;;:9;:15;;;;;;8185:21;;;;8177:72;;;;-1:-1:-1;;;8177:72:23;;18896:2:187;8177:72:23;;;18878:21:187;18935:2;18915:18;;;18908:30;18974:34;18954:18;;;18947:62;-1:-1:-1;;;19025:18:187;;;19018:36;19071:19;;8177:72:23;18694:402:187;8177:72:23;-1:-1:-1;;;;;8283:15:23;;;;;;;:9;:15;;;;;;8301:20;;;8283:38;;8498:13;;;;;;;;;;:23;;;;;;8547:26;;-1:-1:-1;;;;;;;;;;;8547:26:23;;;8315:6;160:25:187;;148:2;133:18;;14:177;8547:26:23;;;;;;;;8584:37;2274:1186:158;4971:446:32;5136:12;5193:5;5168:21;:30;;5160:81;;;;-1:-1:-1;;;5160:81:32;;19303:2:187;5160:81:32;;;19285:21:187;19342:2;19322:18;;;19315:30;19381:34;19361:18;;;19354:62;-1:-1:-1;;;19432:18:187;;;19425:36;19478:19;;5160:81:32;19101:402:187;5160:81:32;5252:12;5266:23;5293:6;-1:-1:-1;;;;;5293:11:32;5312:5;5319:4;5293:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5251:73;;;;5341:69;5368:6;5376:7;5385:10;5397:12;5341:26;:69::i;:::-;5334:76;4971:446;-1:-1:-1;;;;;;;4971:446:32:o;6589:628::-;6769:12;6797:7;6793:418;;;6824:10;:17;6845:1;6824:22;6820:286;;-1:-1:-1;;;;;1476:19:32;;;7031:60;;;;-1:-1:-1;;;7031:60:32;;20002:2:187;7031:60:32;;;19984:21:187;20041:2;20021:18;;;20014:30;20080:31;20060:18;;;20053:59;20129:18;;7031:60:32;19800:353:187;7031:60:32;-1:-1:-1;7126:10:32;7119:17;;6793:418;7167:33;7175:10;7187:12;7898:17;;:21;7894:379;;8126:10;8120:17;8182:15;8169:10;8165:2;8161:19;8154:44;7894:379;8249:12;8242:20;;-1:-1:-1;;;8242:20:32;;;;;;;;:::i;196:250:187:-;281:1;291:113;305:6;302:1;299:13;291:113;;;381:11;;;375:18;362:11;;;355:39;327:2;320:10;291:113;;;-1:-1:-1;;438:1:187;420:16;;413:27;196:250::o;451:396::-;600:2;589:9;582:21;563:4;632:6;626:13;675:6;670:2;659:9;655:18;648:34;691:79;763:6;758:2;747:9;743:18;738:2;730:6;726:15;691:79;:::i;:::-;831:2;810:15;-1:-1:-1;;806:29:187;791:45;;;;838:2;787:54;;451:396;-1:-1:-1;;451:396:187:o;852:131::-;-1:-1:-1;;;;;927:31:187;;917:42;;907:70;;973:1;970;963:12;907:70;852:131;:::o;988:315::-;1056:6;1064;1117:2;1105:9;1096:7;1092:23;1088:32;1085:52;;;1133:1;1130;1123:12;1085:52;1172:9;1159:23;1191:31;1216:5;1191:31;:::i;:::-;1241:5;1293:2;1278:18;;;;1265:32;;-1:-1:-1;;;988:315:187:o;1500:247::-;1559:6;1612:2;1600:9;1591:7;1587:23;1583:32;1580:52;;;1628:1;1625;1618:12;1580:52;1667:9;1654:23;1686:31;1711:5;1686:31;:::i;2005:383::-;2082:6;2090;2098;2151:2;2139:9;2130:7;2126:23;2122:32;2119:52;;;2167:1;2164;2157:12;2119:52;2206:9;2193:23;2225:31;2250:5;2225:31;:::i;:::-;2275:5;2327:2;2312:18;;2299:32;;-1:-1:-1;2378:2:187;2363:18;;;2350:32;;2005:383;-1:-1:-1;;;2005:383:187:o;2636:558::-;2767:6;2775;2828:2;2816:9;2807:7;2803:23;2799:32;2796:52;;;2844:1;2841;2834:12;2796:52;2883:9;2870:23;2902:31;2927:5;2902:31;:::i;:::-;2952:5;-1:-1:-1;3008:2:187;2993:18;;2980:32;3035:18;3024:30;;3021:50;;;3067:1;3064;3057:12;3021:50;3090:22;;3146:3;3128:16;;;3124:26;3121:46;;;3163:1;3160;3153:12;3121:46;3186:2;3176:12;;;2636:558;;;;;:::o;3199:456::-;3276:6;3284;3292;3345:2;3333:9;3324:7;3320:23;3316:32;3313:52;;;3361:1;3358;3351:12;3313:52;3400:9;3387:23;3419:31;3444:5;3419:31;:::i;:::-;3469:5;-1:-1:-1;3526:2:187;3511:18;;3498:32;3539:33;3498:32;3539:33;:::i;:::-;3199:456;;3591:7;;-1:-1:-1;;;3645:2:187;3630:18;;;;3617:32;;3199:456::o;3660:736::-;3764:6;3772;3780;3788;3796;3804;3857:3;3845:9;3836:7;3832:23;3828:33;3825:53;;;3874:1;3871;3864:12;3825:53;3913:9;3900:23;3932:31;3957:5;3932:31;:::i;:::-;3982:5;-1:-1:-1;4039:2:187;4024:18;;4011:32;4052:33;4011:32;4052:33;:::i;:::-;4104:7;-1:-1:-1;4163:2:187;4148:18;;4135:32;4176:33;4135:32;4176:33;:::i;:::-;3660:736;;;;-1:-1:-1;4228:7:187;;4282:2;4267:18;;4254:32;;-1:-1:-1;4333:3:187;4318:19;;4305:33;;4385:3;4370:19;;;4357:33;;-1:-1:-1;3660:736:187;-1:-1:-1;;3660:736:187:o;4798:180::-;4857:6;4910:2;4898:9;4889:7;4885:23;4881:32;4878:52;;;4926:1;4923;4916:12;4878:52;-1:-1:-1;4949:23:187;;4798:180;-1:-1:-1;4798:180:187:o;5213:525::-;5299:6;5307;5315;5323;5376:3;5364:9;5355:7;5351:23;5347:33;5344:53;;;5393:1;5390;5383:12;5344:53;5432:9;5419:23;5451:31;5476:5;5451:31;:::i;:::-;5501:5;-1:-1:-1;5558:2:187;5543:18;;5530:32;5571:33;5530:32;5571:33;:::i;:::-;5213:525;;5623:7;;-1:-1:-1;;;;5677:2:187;5662:18;;5649:32;;5728:2;5713:18;5700:32;;5213:525::o;5743:388::-;5811:6;5819;5872:2;5860:9;5851:7;5847:23;5843:32;5840:52;;;5888:1;5885;5878:12;5840:52;5927:9;5914:23;5946:31;5971:5;5946:31;:::i;:::-;5996:5;-1:-1:-1;6053:2:187;6038:18;;6025:32;6066:33;6025:32;6066:33;:::i;6136:248::-;6204:6;6212;6265:2;6253:9;6244:7;6240:23;6236:32;6233:52;;;6281:1;6278;6271:12;6233:52;-1:-1:-1;;6304:23:187;;;6374:2;6359:18;;;6346:32;;-1:-1:-1;6136:248:187:o;6389:380::-;6468:1;6464:12;;;;6511;;;6532:61;;6586:4;6578:6;6574:17;6564:27;;6532:61;6639:2;6631:6;6628:14;6608:18;6605:38;6602:161;;6685:10;6680:3;6676:20;6673:1;6666:31;6720:4;6717:1;6710:15;6748:4;6745:1;6738:15;6774:447;-1:-1:-1;;;;;7061:15:187;;;7043:34;;7113:15;;;;7108:2;7093:18;;7086:43;7160:2;7145:18;;7138:34;7203:2;7188:18;;7181:34;;;;6992:3;6977:19;;6774:447::o;7226:184::-;7296:6;7349:2;7337:9;7328:7;7324:23;7320:32;7317:52;;;7365:1;7362;7355:12;7317:52;-1:-1:-1;7388:16:187;;7226:184;-1:-1:-1;7226:184:187:o;7830:522::-;7908:4;7914:6;7974:11;7961:25;8068:2;8064:7;8053:8;8037:14;8033:29;8029:43;8009:18;8005:68;7995:96;;8087:1;8084;8077:12;7995:96;8114:33;;8166:20;;;-1:-1:-1;8209:18:187;8198:30;;8195:50;;;8241:1;8238;8231:12;8195:50;8274:4;8262:17;;-1:-1:-1;8305:14:187;8301:27;;;8291:38;;8288:58;;;8342:1;8339;8332:12;8288:58;7830:522;;;;;:::o;8357:269::-;8414:6;8467:2;8455:9;8446:7;8442:23;8438:32;8435:52;;;8483:1;8480;8473:12;8435:52;8522:9;8509:23;8572:4;8565:5;8561:16;8554:5;8551:27;8541:55;;8592:1;8589;8582:12;8631:251;8701:6;8754:2;8742:9;8733:7;8729:23;8725:32;8722:52;;;8770:1;8767;8760:12;8722:52;8802:9;8796:16;8821:31;8846:5;8821:31;:::i;9691:127::-;9752:10;9747:3;9743:20;9740:1;9733:31;9783:4;9780:1;9773:15;9807:4;9804:1;9797:15;9823:125;9888:9;;;9909:10;;;9906:36;;;9922:18;;:::i;11167:217::-;11207:1;11233;11223:132;;11277:10;11272:3;11268:20;11265:1;11258:31;11312:4;11309:1;11302:15;11340:4;11337:1;11330:15;11223:132;-1:-1:-1;11369:9:187;;11167:217::o;12376:168::-;12416:7;12482:1;12478;12474:6;12470:14;12467:1;12464:21;12459:1;12452:9;12445:17;12441:45;12438:71;;;12489:18;;:::i;:::-;-1:-1:-1;12529:9:187;;12376:168::o;12909:407::-;13111:2;13093:21;;;13150:2;13130:18;;;13123:30;13189:34;13184:2;13169:18;;13162:62;-1:-1:-1;;;13255:2:187;13240:18;;13233:41;13306:3;13291:19;;12909:407::o;13917:128::-;13984:9;;;14005:11;;;14002:37;;;14019:18;;:::i;14050:277::-;14117:6;14170:2;14158:9;14149:7;14145:23;14141:32;14138:52;;;14186:1;14183;14176:12;14138:52;14218:9;14212:16;14271:5;14264:13;14257:21;14250:5;14247:32;14237:60;;14293:1;14290;14283:12;15548:127;15609:10;15604:3;15600:20;15597:1;15590:31;15640:4;15637:1;15630:15;15664:4;15661:1;15654:15;15806:545;15908:2;15903:3;15900:11;15897:448;;;15944:1;15969:5;15965:2;15958:17;16014:4;16010:2;16000:19;16084:2;16072:10;16068:19;16065:1;16061:27;16055:4;16051:38;16120:4;16108:10;16105:20;16102:47;;;-1:-1:-1;16143:4:187;16102:47;16198:2;16193:3;16189:12;16186:1;16182:20;16176:4;16172:31;16162:41;;16253:82;16271:2;16264:5;16261:13;16253:82;;;16316:17;;;16297:1;16286:13;16253:82;;16527:1352;16653:3;16647:10;16680:18;16672:6;16669:30;16666:56;;;16702:18;;:::i;:::-;16731:97;16821:6;16781:38;16813:4;16807:11;16781:38;:::i;:::-;16775:4;16731:97;:::i;:::-;16883:4;;16947:2;16936:14;;16964:1;16959:663;;;;17666:1;17683:6;17680:89;;;-1:-1:-1;17735:19:187;;;17729:26;17680:89;-1:-1:-1;;16484:1:187;16480:11;;;16476:24;16472:29;16462:40;16508:1;16504:11;;;16459:57;17782:81;;16929:944;;16959:663;15753:1;15746:14;;;15790:4;15777:18;;-1:-1:-1;;16995:20:187;;;17113:236;17127:7;17124:1;17121:14;17113:236;;;17216:19;;;17210:26;17195:42;;17308:27;;;;17276:1;17264:14;;;;17143:19;;17113:236;;;17117:3;17377:6;17368:7;17365:19;17362:201;;;17438:19;;;17432:26;-1:-1:-1;;17521:1:187;17517:14;;;17533:3;17513:24;17509:37;17505:42;17490:58;17475:74;;17362:201;-1:-1:-1;;;;;17609:1:187;17593:14;;;17589:22;17576:36;;-1:-1:-1;16527:1352:187:o;19508:287::-;19637:3;19675:6;19669:13;19691:66;19750:6;19745:3;19738:4;19730:6;19726:17;19691:66;:::i;:::-;19773:16;;;;;19508:287;-1:-1:-1;;19508:287:187:o",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "POOL()": "7535d246",
    "RESERVE_TREASURY_ADDRESS()": "ae167335",
    "UNDERLYING_ASSET_ADDRESS()": "b16a19de",
    "UNDERLYING_COLLATERAL_ADDRESS()": "57f1b837",
    "UNDERLYING_MAX_TOKEN_ID()": "04601608",
    "UNDERLYING_MIN_TOKEN_ID()": "c35be017",
    "allowance(address,address)": "dd62ed3e",
    "approve(address,uint256)": "095ea7b3",
    "balanceOf(address)": "70a08231",
    "burn(address,address,uint256,uint256)": "d7020d0a",
    "decimals()": "313ce567",
    "decreaseAllowance(address,uint256)": "a457c2d7",
    "exchangeRate()": "3ba0b9a9",
    "getAuctionCallerPercentage()": "f9e2bf6b",
    "getAuctionCreatorPercentage()": "14ff75c9",
    "getPoolIncentivesController()": "19ef9268",
    "getReserveCreatorAddress()": "47bec6f0",
    "getReserveCreatorPercentage()": "2d6aa128",
    "getReserveNormalizationFactor()": "36a72234",
    "getScaledUserBalanceAndSupply(address)": "0afbcdc9",
    "increaseAllowance(address,uint256)": "39509351",
    "initialize(address,(address,string,string,uint256,uint256,address,string,string,uint8,address,string,string,address,string,string,address,string,string,address,uint256,address,address,uint256,uint256,uint256,string))": "1d165564",
    "mint(address,uint256,uint256)": "156e29f6",
    "mintAuctionPaymentToStakeholders(address,address,address,uint256,uint256,uint256)": "30c1e38b",
    "mintStableDebtRepaymentToStakeholders(address,uint256,uint256)": "679d0095",
    "mintVariableDebtRepaymentToStakeholders(uint256,uint256)": "e8f7a1a5",
    "name()": "06fdde03",
    "scaledBalanceOf(address)": "1da24f3e",
    "scaledTotalSupply()": "b1bf962d",
    "setAuctionCallerPercentage(uint256)": "7ccd3b46",
    "setAuctionCreatorPercentage(uint256)": "6b8465f8",
    "setReserveCreatorAddress(address)": "bc1d19dd",
    "setReserveCreatorPercentage(uint256)": "acac18e4",
    "symbol()": "95d89b41",
    "totalSupply()": "18160ddd",
    "transfer(address,uint256)": "a9059cbb",
    "transferFrom(address,address,uint256)": "23b872dd",
    "transferUnderlyingTo(address,uint256)": "4efecaa5"
  },
  "rawMetadata": "{\"compiler\":{\"version\":\"0.8.16+commit.07a7930e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"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\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"BalanceTransfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"creatorAddress\",\"type\":\"uint256\"}],\"name\":\"CreatorAddressUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"creatorPercentage\",\"type\":\"uint256\"}],\"name\":\"CreatorPecentageUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"underlyingCollateral\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"lendingPool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"creatorPercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"auctionCallerPercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"auctionCreatorPercentage\",\"type\":\"uint256\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"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\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"POOL\",\"outputs\":[{\"internalType\":\"contract ILendingPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RESERVE_TREASURY_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNDERLYING_ASSET_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNDERLYING_COLLATERAL_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNDERLYING_MAX_TOKEN_ID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNDERLYING_MIN_TOKEN_ID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiverOfUnderlying\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"exchangeRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuctionCallerPercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuctionCreatorPercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolIncentivesController\",\"outputs\":[{\"internalType\":\"contract IPoolIncentivesController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReserveCreatorAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReserveCreatorPercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReserveNormalizationFactor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getScaledUserBalanceAndSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAddressProvider\",\"name\":\"addressProvider\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"underlyingCollateral\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"underlyingCollateralName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"underlyingCollateralSymbol\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"underlyingMaxTokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"underlyingMinTokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"underlyingAssetName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"underlyingAssetSymbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"underlyingAssetDecimals\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"fTokenImpl\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"fTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"fTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"stableDebtTokenImpl\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"stableDebtTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"stableDebtTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"variableDebtTokenImpl\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"variableDebtTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"variableDebtTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"interestRateStrategy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"baseLTV\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"creatorPercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"auctionCallerPercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"auctionCreatorPercentage\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"assetPriceFeed\",\"type\":\"string\"}],\"internalType\":\"struct ConfigTypes.InitReserveInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidationFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"mintAuctionPaymentToStakeholders\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"mintStableDebtRepaymentToStakeholders\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"mintVariableDebtRepaymentToStakeholders\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"scaledBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scaledTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"auctionCallerPercentage\",\"type\":\"uint256\"}],\"name\":\"setAuctionCallerPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"auctionCreatorPercentage\",\"type\":\"uint256\"}],\"name\":\"setAuctionCreatorPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"}],\"name\":\"setReserveCreatorAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"creatorPercentage\",\"type\":\"uint256\"}],\"name\":\"setReserveCreatorPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferUnderlyingTo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"FluidNFT \",\"details\":\"Implementation of the interest bearing token for the FluidNFT protocol\",\"kind\":\"dev\",\"methods\":{\"POOL()\":{\"details\":\"Returns the lending pool where this fToken is used*\"},\"RESERVE_TREASURY_ADDRESS()\":{\"details\":\"Returns the address of the FluidNFT treasury, receiving the fees on this fToken*\"},\"UNDERLYING_ASSET_ADDRESS()\":{\"details\":\"Returns the address of the underlyingAsset of this fToken*\"},\"UNDERLYING_COLLATERAL_ADDRESS()\":{\"details\":\"Returns the address of the underlyingCollateral of this fToken*\"},\"UNDERLYING_MAX_TOKEN_ID()\":{\"details\":\"Returns the tokenId of the underlyingMaxTokenId of this fToken*\"},\"UNDERLYING_MIN_TOKEN_ID()\":{\"details\":\"Returns the tokenId of the underlyingMinTokenId of this fToken*\"},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"Calculates the balance of the user: principal balance + interest generated by the principal\",\"params\":{\"user\":\"The user whose balance is calculated\"},\"returns\":{\"_0\":\"The balance of the user*\"}},\"burn(address,address,uint256,uint256)\":{\"details\":\"Burns fTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying` - Only callable by the LendingPool, as extra state updates there need to be managed\",\"params\":{\"amount\":\"The amount being burned\",\"index\":\"The new liquidity index of the reserve*\",\"receiverOfUnderlying\":\"The address that will receive the underlying\",\"user\":\"The owner of the fTokens, getting them burned\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"decimals()\":{\"details\":\"Returns the decimals of the token.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"exchangeRate()\":{\"details\":\"Returns the fTOKEN : underlyingASSET exchange rate\",\"returns\":{\"_0\":\"the exchange rate*\"}},\"getPoolIncentivesController()\":{\"details\":\"Returns the address of the incentives controller contract*\"},\"getScaledUserBalanceAndSupply(address)\":{\"details\":\"Returns the scaled balance of the user and the scaled total supply.\",\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The scaled balance of the user\",\"_1\":\"The scaled balance and the scaled total supply*\"}},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"initialize(address,(address,string,string,uint256,uint256,address,string,string,uint8,address,string,string,address,string,string,address,string,string,address,uint256,address,address,uint256,uint256,uint256,string))\":{\"details\":\"Initializes the fToken\",\"params\":{\"input\":\"The reserve input\"}},\"mint(address,uint256,uint256)\":{\"details\":\"Mints `amount` fTokens to `user` - Only callable by the LendingPool, as extra state updates there need to be managed\",\"params\":{\"amount\":\"The amount of tokens getting minted\",\"index\":\"The new liquidity index of the reserve\",\"user\":\"The address receiving the minted tokens\"},\"returns\":{\"_0\":\"`true` if the the previous balance of the user was 0\"}},\"mintVariableDebtRepaymentToStakeholders(uint256,uint256)\":{\"details\":\"Mints fTokens to the stakeholders - Only callable by the LendingPool\",\"params\":{\"amount\":\"The amount of tokens getting minted\",\"index\":\"The new liquidity index of the reserve\"}},\"name()\":{\"details\":\"Returns the name of the token.\"},\"scaledBalanceOf(address)\":{\"details\":\"Returns the scaled balance of the user. The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update\",\"params\":{\"user\":\"The user whose balance is calculated\"},\"returns\":{\"_0\":\"The scaled balance of the user*\"}},\"scaledTotalSupply()\":{\"details\":\"Returns the scaled total supply of the variable debt token. Represents sum(debt/index)\",\"returns\":{\"_0\":\"the scaled total supply*\"}},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"Calculates the total supply of the specific fToken Since the balance of every single user increases over time, the total supply does that too.\",\"returns\":{\"_0\":\"the current total supply*\"}},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`.\"},\"transferUnderlyingTo(address,uint256)\":{\"details\":\"Transfers the underlying asset to `target`. Used by the LendingPool to transfer assets in borrow(), withdraw() and flashLoan()\",\"params\":{\"amount\":\"The amount getting transferred\",\"target\":\"The recipient of the fTokens\"},\"returns\":{\"_0\":\"The amount transferred*\"}}},\"title\":\"FluidNFT ERC20 FToken\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/protocol/tokenization/FToken.sol\":\"FToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@chainlink/=lib/chainlink/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":chainlink/=lib/chainlink/integration-tests/contracts/ethereum/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://899f850f7df5a270bccfb765d70069959ca1c20d3a7381c1c3bda8a3ffee1935\",\"dweb:/ipfs/QmVdnAqwyX2L3nX2HDA5WKGtVBFyH1nKE9A1k7fZnPBkhP\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol\":{\"keccak256\":\"0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c39b800e55781c0f7a644ec9cc615664dbe2f009198e537e6acaad3086ba093\",\"dweb:/ipfs/Qmaugq2wsB1ASX8Kv29NwXqYhZY8HRNqcdvmBe9UUNEq2V\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol\":{\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2\",\"dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d\",\"dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/draft-IERC20PermitUpgradeable.sol\":{\"keccak256\":\"0xcc70d8e2281fb3ff69e8ab242500f10142cd0a7fa8dd9e45882be270d4d09024\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://17a4063bc918df0f7bb9cbf04c6f0bb4977afab3f2fc212bc138a178312a221d\",\"dweb:/ipfs/QmZMdvsHP5mDEAAdrK4bNeNh47TfmSFgN9qEBFTbie7zmm\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/utils/SafeERC20Upgradeable.sol\":{\"keccak256\":\"0x220c4a5af915e656be2aaa85ca57505d102418e476b1e2ef6c62e0c6ac143871\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6ed2c33173f7e7000889abed7c339b7a0e3b7867cdea546caaf6bc917ef1039c\",\"dweb:/ipfs/QmQ4Ye5h7jm6V4CdhT3r6hvf25DtiV74ErppQVE4SpRKj6\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://72460c66cd1c3b1c11b863e0d8df0a1c56f37743019e468dc312c754f43e3b06\",\"dweb:/ipfs/QmPExYKiNb9PUsgktQBupPaM33kzDHxaYoVeJdLhv8s879\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol\":{\"keccak256\":\"0x0f633a0223d9a1dcccfcf38a64c9de0874dfcbfac0c6941ccf074d63a2ce0e1e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://864a40efcffdf408044c332a5aa38ec5618ed7b4eecb8f65faf45671bd6cdc65\",\"dweb:/ipfs/QmQJquTMtc6fgm5JQzGdsGpA2fqBe3MHWEdt2qzaLySMdN\"]},\"src/interfaces/IAddressProvider.sol\":{\"keccak256\":\"0x6730abfcd8770e3279dad6137bf619ab98ee8b049e6dd85d2fbe87ba6224fde8\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://9b7d1588eab025b049f858ab2f329be7fec220198d956b9b61bf0b9bddc5761a\",\"dweb:/ipfs/QmTaFkYSUfWmbpsyE2TKC1QvP6eTDggZ72ZWodBhydqt5X\"]},\"src/interfaces/IConfigurator.sol\":{\"keccak256\":\"0x39a8045982269f806b611033dc74b844a26faa5376dabe26a8e0eaeb2b457ed2\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://2e61c2b8df0daed7e900d2dcd89ae94a8a60d1b5551038d46726bf2c195102c8\",\"dweb:/ipfs/QmPwJzTcem2d72YbmySWJXLnHazpWQqmpXmnmmGZsT1Cwg\"]},\"src/interfaces/IFToken.sol\":{\"keccak256\":\"0x4c3ebc83c05720c9257d1b6b4930b647c08ba766b76928622a4c91c4a541a718\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://920cb41d52a659b88030fc3cf84fe5a87cc42f0c6e5c83a691c4732f84906689\",\"dweb:/ipfs/Qma657T4np5eBNono5yBXxE71jfT1TRDDkCPpH3kfw3SxM\"]},\"src/interfaces/ILendingPool.sol\":{\"keccak256\":\"0x345ab4285354bb5184bdd501d7c37920a711215b6f6c2db05b05d585f2454115\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://3b6264b135760dcdd59b9a3566c1305b00084922da177159a85c206ef6a91266\",\"dweb:/ipfs/QmSotEH7zF3vrEgo2gZuunWwroHgc6bw7TVRntzv7jsJn1\"]},\"src/interfaces/IPoolIncentivesController.sol\":{\"keccak256\":\"0x7cb2c32050814e6d6d962a603104facc3bb1dad15171304e3ee756648e8f9ae1\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://cf534f592706b2a61c539c03e5d1e199c15472bcfb4ee69838e5c93ba7914466\",\"dweb:/ipfs/QmPrvXhJigK1Ke51YwAWHon1Kv88WT26iD3MwzCaPDs1Kv\"]},\"src/interfaces/IScaledBalanceToken.sol\":{\"keccak256\":\"0xb6a8f00773c5f58af761573f39f6aa3649c9deec5c4e078f5e3ca78940e4eac7\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://0938c6fd92b015670a2bcf5ff971aafbc6295e07c78d1300c5e36a67002dc70c\",\"dweb:/ipfs/QmYDcxNaAAfnupwDcDN1xtQcCEXTwW1FWiaTiU3MksCQ1Z\"]},\"src/protocol/libraries/helpers/Errors.sol\":{\"keccak256\":\"0x490e76871922e89a13ba0bb88977be18c143fa9d0cd9afb033744a3d81479c52\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://1c409d4d1e1689d8d8f3c3e361198d20f3b6476608c5316d8e2d91f52373e8e3\",\"dweb:/ipfs/QmRZaYpxqjmBpbxb51KqswKYPSeCsU3ejbmk5E3MrMxJaM\"]},\"src/protocol/libraries/math/PercentageMath.sol\":{\"keccak256\":\"0xb84274fc3effba81036256cf7fde67b3dbfe86c4ffd0e062711a3270157952a2\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://3ecaf26e713b39d89ee21fb8bfefe55fe2fec4a2f5a2bffba7612f82182b7262\",\"dweb:/ipfs/QmZ6oXpNspwBEkiJEz1EhsU4EVBpG3anNjtzcycNEgAkfe\"]},\"src/protocol/libraries/math/WadRayMath.sol\":{\"keccak256\":\"0xb29e8edc0e0e6bfead27945357c9e4a66e0c11e58ff3b87ee68ed1b5ca416735\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://d1b4377995155f32bb6c3ba558875c617fa63601c597099d3460063ac2a15d93\",\"dweb:/ipfs/QmUvCE6Q2J62sMgQCCEbQauWSYJpMiu3QCgWa6mZnEmcK2\"]},\"src/protocol/libraries/types/ConfigTypes.sol\":{\"keccak256\":\"0xa8f9b14d9adf738033fd1847b30012d0e022027614fd6c9bb31a01bc6bfb1634\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://b20c579d1b683dd5977a675c2e46adeebd56c96faa68cda9b0767edf02a5b650\",\"dweb:/ipfs/QmPULpaX2ouktArvXJxYNVPQ9vKBhEeCYA4smo8v57qFLD\"]},\"src/protocol/libraries/types/DataTypes.sol\":{\"keccak256\":\"0x070f7865fe84ce4c9ebd86bbe24771607fbdb4e8777510b46cb5064e4d9b90a3\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://504fd0c937cc69cc0737c4ef5dcec477017ccbff609b45b210274fd7bf0792cf\",\"dweb:/ipfs/QmeW1TkAHib7XRBVmgMRTdmsa4Rg9HVToTMnifEE1C7mTi\"]},\"src/protocol/tokenization/FToken.sol\":{\"keccak256\":\"0xeb545a5da5b407255a2727e47fba1fb926ef49700d932c3a98730e952c8d413e\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://d60cb6136fdf721632ca1244ce99c402d40b670e3b6d844f03452bdd96e00ce0\",\"dweb:/ipfs/QmaNdee5q68QcCr1qrPyakaeibQiKvLH2VSH7ZrxUe8gqi\"]},\"src/protocol/tokenization/base/IncentivizedERC20.sol\":{\"keccak256\":\"0xeef558a6fb8826dd7eff89e1eb24072b5533825cbbfd3ee950623bb433ecabc6\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://4453844f67a9d9339dda3d5081073188d45b8fd274aea524b239e3462ef67236\",\"dweb:/ipfs/QmVxGsuhu1NGFd5WqnGZns8pY1VEUALhMUTx76x6hxhkn8\"]}},\"version\":1}",
  "metadata": {
    "compiler": {
      "version": "0.8.16+commit.07a7930e"
    },
    "language": "Solidity",
    "output": {
      "abi": [
        {
          "inputs": [],
          "stateMutability": "nonpayable",
          "type": "constructor"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "spender",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Approval",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "from",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "index",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "BalanceTransfer",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "from",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "target",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "index",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Burn",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "creatorAddress",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "CreatorAddressUpdated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "creatorPercentage",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "CreatorPecentageUpdated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "underlyingCollateral",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "underlyingAsset",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "lendingPool",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "incentivesController",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "address",
              "name": "treasury",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "address",
              "name": "creator",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "creatorPercentage",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "auctionCallerPercentage",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "auctionCreatorPercentage",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Initialized",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint8",
              "name": "version",
              "type": "uint8",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Initialized",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "from",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "index",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Mint",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "from",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Transfer",
          "anonymous": false
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "POOL",
          "outputs": [
            {
              "internalType": "contract ILendingPool",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "RESERVE_TREASURY_ADDRESS",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "UNDERLYING_ASSET_ADDRESS",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "UNDERLYING_COLLATERAL_ADDRESS",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "UNDERLYING_MAX_TOKEN_ID",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "UNDERLYING_MIN_TOKEN_ID",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "spender",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "allowance",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "spender",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "approve",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "user",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "balanceOf",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "user",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "receiverOfUnderlying",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "index",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "burn"
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "decimals",
          "outputs": [
            {
              "internalType": "uint8",
              "name": "",
              "type": "uint8"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "spender",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "subtractedValue",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "decreaseAllowance",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "exchangeRate",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getAuctionCallerPercentage",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getAuctionCreatorPercentage",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getPoolIncentivesController",
          "outputs": [
            {
              "internalType": "contract IPoolIncentivesController",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getReserveCreatorAddress",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getReserveCreatorPercentage",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getReserveNormalizationFactor",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "user",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getScaledUserBalanceAndSupply",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "spender",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "addedValue",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "increaseAllowance",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "contract IAddressProvider",
              "name": "addressProvider",
              "type": "address"
            },
            {
              "internalType": "struct ConfigTypes.InitReserveInput",
              "name": "input",
              "type": "tuple",
              "components": [
                {
                  "internalType": "address",
                  "name": "underlyingCollateral",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "underlyingCollateralName",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "underlyingCollateralSymbol",
                  "type": "string"
                },
                {
                  "internalType": "uint256",
                  "name": "underlyingMaxTokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "underlyingMinTokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "underlyingAsset",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "underlyingAssetName",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "underlyingAssetSymbol",
                  "type": "string"
                },
                {
                  "internalType": "uint8",
                  "name": "underlyingAssetDecimals",
                  "type": "uint8"
                },
                {
                  "internalType": "address",
                  "name": "fTokenImpl",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "fTokenName",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "fTokenSymbol",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "stableDebtTokenImpl",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "stableDebtTokenName",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "stableDebtTokenSymbol",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "variableDebtTokenImpl",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "variableDebtTokenName",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "variableDebtTokenSymbol",
                  "type": "string"
                },
                {
                  "internalType": "address",
                  "name": "interestRateStrategy",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "baseLTV",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "treasury",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "creator",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "creatorPercentage",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "auctionCallerPercentage",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "auctionCreatorPercentage",
                  "type": "uint256"
                },
                {
                  "internalType": "string",
                  "name": "assetPriceFeed",
                  "type": "string"
                }
              ]
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "initialize"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "user",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "index",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "mint",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "user",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "caller",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "liquidationFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "index",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "mintAuctionPaymentToStakeholders"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "user",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "index",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "mintStableDebtRepaymentToStakeholders"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "index",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "mintVariableDebtRepaymentToStakeholders"
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "name",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "user",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "scaledBalanceOf",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "scaledTotalSupply",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "auctionCallerPercentage",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setAuctionCallerPercentage"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "auctionCreatorPercentage",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setAuctionCreatorPercentage"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "creator",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setReserveCreatorAddress"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "creatorPercentage",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setReserveCreatorPercentage"
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "symbol",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "totalSupply",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "transfer",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "from",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "transferFrom",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "target",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "transferUnderlyingTo",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        }
      ],
      "devdoc": {
        "kind": "dev",
        "methods": {
          "POOL()": {
            "details": "Returns the lending pool where this fToken is used*"
          },
          "RESERVE_TREASURY_ADDRESS()": {
            "details": "Returns the address of the FluidNFT treasury, receiving the fees on this fToken*"
          },
          "UNDERLYING_ASSET_ADDRESS()": {
            "details": "Returns the address of the underlyingAsset of this fToken*"
          },
          "UNDERLYING_COLLATERAL_ADDRESS()": {
            "details": "Returns the address of the underlyingCollateral of this fToken*"
          },
          "UNDERLYING_MAX_TOKEN_ID()": {
            "details": "Returns the tokenId of the underlyingMaxTokenId of this fToken*"
          },
          "UNDERLYING_MIN_TOKEN_ID()": {
            "details": "Returns the tokenId of the underlyingMinTokenId of this fToken*"
          },
          "allowance(address,address)": {
            "details": "See {IERC20-allowance}."
          },
          "approve(address,uint256)": {
            "details": "See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."
          },
          "balanceOf(address)": {
            "details": "Calculates the balance of the user: principal balance + interest generated by the principal",
            "params": {
              "user": "The user whose balance is calculated"
            },
            "returns": {
              "_0": "The balance of the user*"
            }
          },
          "burn(address,address,uint256,uint256)": {
            "details": "Burns fTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying` - Only callable by the LendingPool, as extra state updates there need to be managed",
            "params": {
              "amount": "The amount being burned",
              "index": "The new liquidity index of the reserve*",
              "receiverOfUnderlying": "The address that will receive the underlying",
              "user": "The owner of the fTokens, getting them burned"
            }
          },
          "constructor": {
            "custom:oz-upgrades-unsafe-allow": "constructor"
          },
          "decimals()": {
            "details": "Returns the decimals of the token."
          },
          "decreaseAllowance(address,uint256)": {
            "details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."
          },
          "exchangeRate()": {
            "details": "Returns the fTOKEN : underlyingASSET exchange rate",
            "returns": {
              "_0": "the exchange rate*"
            }
          },
          "getPoolIncentivesController()": {
            "details": "Returns the address of the incentives controller contract*"
          },
          "getScaledUserBalanceAndSupply(address)": {
            "details": "Returns the scaled balance of the user and the scaled total supply.",
            "params": {
              "user": "The address of the user"
            },
            "returns": {
              "_0": "The scaled balance of the user",
              "_1": "The scaled balance and the scaled total supply*"
            }
          },
          "increaseAllowance(address,uint256)": {
            "details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address."
          },
          "initialize(address,(address,string,string,uint256,uint256,address,string,string,uint8,address,string,string,address,string,string,address,string,string,address,uint256,address,address,uint256,uint256,uint256,string))": {
            "details": "Initializes the fToken",
            "params": {
              "input": "The reserve input"
            }
          },
          "mint(address,uint256,uint256)": {
            "details": "Mints `amount` fTokens to `user` - Only callable by the LendingPool, as extra state updates there need to be managed",
            "params": {
              "amount": "The amount of tokens getting minted",
              "index": "The new liquidity index of the reserve",
              "user": "The address receiving the minted tokens"
            },
            "returns": {
              "_0": "`true` if the the previous balance of the user was 0"
            }
          },
          "mintVariableDebtRepaymentToStakeholders(uint256,uint256)": {
            "details": "Mints fTokens to the stakeholders - Only callable by the LendingPool",
            "params": {
              "amount": "The amount of tokens getting minted",
              "index": "The new liquidity index of the reserve"
            }
          },
          "name()": {
            "details": "Returns the name of the token."
          },
          "scaledBalanceOf(address)": {
            "details": "Returns the scaled balance of the user. The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update",
            "params": {
              "user": "The user whose balance is calculated"
            },
            "returns": {
              "_0": "The scaled balance of the user*"
            }
          },
          "scaledTotalSupply()": {
            "details": "Returns the scaled total supply of the variable debt token. Represents sum(debt/index)",
            "returns": {
              "_0": "the scaled total supply*"
            }
          },
          "symbol()": {
            "details": "Returns the symbol of the token, usually a shorter version of the name."
          },
          "totalSupply()": {
            "details": "Calculates the total supply of the specific fToken Since the balance of every single user increases over time, the total supply does that too.",
            "returns": {
              "_0": "the current total supply*"
            }
          },
          "transfer(address,uint256)": {
            "details": "See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`."
          },
          "transferFrom(address,address,uint256)": {
            "details": "See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`."
          },
          "transferUnderlyingTo(address,uint256)": {
            "details": "Transfers the underlying asset to `target`. Used by the LendingPool to transfer assets in borrow(), withdraw() and flashLoan()",
            "params": {
              "amount": "The amount getting transferred",
              "target": "The recipient of the fTokens"
            },
            "returns": {
              "_0": "The amount transferred*"
            }
          }
        },
        "version": 1
      },
      "userdoc": {
        "kind": "user",
        "methods": {},
        "version": 1
      }
    },
    "settings": {
      "remappings": [
        ":@chainlink/=lib/chainlink/",
        ":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
        ":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
        ":chainlink/=lib/chainlink/integration-tests/contracts/ethereum/src/",
        ":ds-test/=lib/forge-std/lib/ds-test/src/",
        ":forge-std/=lib/forge-std/src/"
      ],
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "metadata": {
        "bytecodeHash": "ipfs"
      },
      "compilationTarget": {
        "src/protocol/tokenization/FToken.sol": "FToken"
      },
      "libraries": {}
    },
    "sources": {
      "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": {
        "keccak256": "0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27",
        "urls": [
          "bzz-raw://899f850f7df5a270bccfb765d70069959ca1c20d3a7381c1c3bda8a3ffee1935",
          "dweb:/ipfs/QmVdnAqwyX2L3nX2HDA5WKGtVBFyH1nKE9A1k7fZnPBkhP"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol": {
        "keccak256": "0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42",
        "urls": [
          "bzz-raw://7c39b800e55781c0f7a644ec9cc615664dbe2f009198e537e6acaad3086ba093",
          "dweb:/ipfs/Qmaugq2wsB1ASX8Kv29NwXqYhZY8HRNqcdvmBe9UUNEq2V"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": {
        "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff",
        "urls": [
          "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2",
          "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol": {
        "keccak256": "0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb",
        "urls": [
          "bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d",
          "dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/draft-IERC20PermitUpgradeable.sol": {
        "keccak256": "0xcc70d8e2281fb3ff69e8ab242500f10142cd0a7fa8dd9e45882be270d4d09024",
        "urls": [
          "bzz-raw://17a4063bc918df0f7bb9cbf04c6f0bb4977afab3f2fc212bc138a178312a221d",
          "dweb:/ipfs/QmZMdvsHP5mDEAAdrK4bNeNh47TfmSFgN9qEBFTbie7zmm"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/utils/SafeERC20Upgradeable.sol": {
        "keccak256": "0x220c4a5af915e656be2aaa85ca57505d102418e476b1e2ef6c62e0c6ac143871",
        "urls": [
          "bzz-raw://6ed2c33173f7e7000889abed7c339b7a0e3b7867cdea546caaf6bc917ef1039c",
          "dweb:/ipfs/QmQ4Ye5h7jm6V4CdhT3r6hvf25DtiV74ErppQVE4SpRKj6"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": {
        "keccak256": "0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183",
        "urls": [
          "bzz-raw://72460c66cd1c3b1c11b863e0d8df0a1c56f37743019e468dc312c754f43e3b06",
          "dweb:/ipfs/QmPExYKiNb9PUsgktQBupPaM33kzDHxaYoVeJdLhv8s879"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": {
        "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149",
        "urls": [
          "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c",
          "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol": {
        "keccak256": "0x0f633a0223d9a1dcccfcf38a64c9de0874dfcbfac0c6941ccf074d63a2ce0e1e",
        "urls": [
          "bzz-raw://864a40efcffdf408044c332a5aa38ec5618ed7b4eecb8f65faf45671bd6cdc65",
          "dweb:/ipfs/QmQJquTMtc6fgm5JQzGdsGpA2fqBe3MHWEdt2qzaLySMdN"
        ],
        "license": "MIT"
      },
      "src/interfaces/IAddressProvider.sol": {
        "keccak256": "0x6730abfcd8770e3279dad6137bf619ab98ee8b049e6dd85d2fbe87ba6224fde8",
        "urls": [
          "bzz-raw://9b7d1588eab025b049f858ab2f329be7fec220198d956b9b61bf0b9bddc5761a",
          "dweb:/ipfs/QmTaFkYSUfWmbpsyE2TKC1QvP6eTDggZ72ZWodBhydqt5X"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/IConfigurator.sol": {
        "keccak256": "0x39a8045982269f806b611033dc74b844a26faa5376dabe26a8e0eaeb2b457ed2",
        "urls": [
          "bzz-raw://2e61c2b8df0daed7e900d2dcd89ae94a8a60d1b5551038d46726bf2c195102c8",
          "dweb:/ipfs/QmPwJzTcem2d72YbmySWJXLnHazpWQqmpXmnmmGZsT1Cwg"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/IFToken.sol": {
        "keccak256": "0x4c3ebc83c05720c9257d1b6b4930b647c08ba766b76928622a4c91c4a541a718",
        "urls": [
          "bzz-raw://920cb41d52a659b88030fc3cf84fe5a87cc42f0c6e5c83a691c4732f84906689",
          "dweb:/ipfs/Qma657T4np5eBNono5yBXxE71jfT1TRDDkCPpH3kfw3SxM"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/ILendingPool.sol": {
        "keccak256": "0x345ab4285354bb5184bdd501d7c37920a711215b6f6c2db05b05d585f2454115",
        "urls": [
          "bzz-raw://3b6264b135760dcdd59b9a3566c1305b00084922da177159a85c206ef6a91266",
          "dweb:/ipfs/QmSotEH7zF3vrEgo2gZuunWwroHgc6bw7TVRntzv7jsJn1"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/IPoolIncentivesController.sol": {
        "keccak256": "0x7cb2c32050814e6d6d962a603104facc3bb1dad15171304e3ee756648e8f9ae1",
        "urls": [
          "bzz-raw://cf534f592706b2a61c539c03e5d1e199c15472bcfb4ee69838e5c93ba7914466",
          "dweb:/ipfs/QmPrvXhJigK1Ke51YwAWHon1Kv88WT26iD3MwzCaPDs1Kv"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/IScaledBalanceToken.sol": {
        "keccak256": "0xb6a8f00773c5f58af761573f39f6aa3649c9deec5c4e078f5e3ca78940e4eac7",
        "urls": [
          "bzz-raw://0938c6fd92b015670a2bcf5ff971aafbc6295e07c78d1300c5e36a67002dc70c",
          "dweb:/ipfs/QmYDcxNaAAfnupwDcDN1xtQcCEXTwW1FWiaTiU3MksCQ1Z"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/helpers/Errors.sol": {
        "keccak256": "0x490e76871922e89a13ba0bb88977be18c143fa9d0cd9afb033744a3d81479c52",
        "urls": [
          "bzz-raw://1c409d4d1e1689d8d8f3c3e361198d20f3b6476608c5316d8e2d91f52373e8e3",
          "dweb:/ipfs/QmRZaYpxqjmBpbxb51KqswKYPSeCsU3ejbmk5E3MrMxJaM"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/math/PercentageMath.sol": {
        "keccak256": "0xb84274fc3effba81036256cf7fde67b3dbfe86c4ffd0e062711a3270157952a2",
        "urls": [
          "bzz-raw://3ecaf26e713b39d89ee21fb8bfefe55fe2fec4a2f5a2bffba7612f82182b7262",
          "dweb:/ipfs/QmZ6oXpNspwBEkiJEz1EhsU4EVBpG3anNjtzcycNEgAkfe"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/math/WadRayMath.sol": {
        "keccak256": "0xb29e8edc0e0e6bfead27945357c9e4a66e0c11e58ff3b87ee68ed1b5ca416735",
        "urls": [
          "bzz-raw://d1b4377995155f32bb6c3ba558875c617fa63601c597099d3460063ac2a15d93",
          "dweb:/ipfs/QmUvCE6Q2J62sMgQCCEbQauWSYJpMiu3QCgWa6mZnEmcK2"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/types/ConfigTypes.sol": {
        "keccak256": "0xa8f9b14d9adf738033fd1847b30012d0e022027614fd6c9bb31a01bc6bfb1634",
        "urls": [
          "bzz-raw://b20c579d1b683dd5977a675c2e46adeebd56c96faa68cda9b0767edf02a5b650",
          "dweb:/ipfs/QmPULpaX2ouktArvXJxYNVPQ9vKBhEeCYA4smo8v57qFLD"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/types/DataTypes.sol": {
        "keccak256": "0x070f7865fe84ce4c9ebd86bbe24771607fbdb4e8777510b46cb5064e4d9b90a3",
        "urls": [
          "bzz-raw://504fd0c937cc69cc0737c4ef5dcec477017ccbff609b45b210274fd7bf0792cf",
          "dweb:/ipfs/QmeW1TkAHib7XRBVmgMRTdmsa4Rg9HVToTMnifEE1C7mTi"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/tokenization/FToken.sol": {
        "keccak256": "0xeb545a5da5b407255a2727e47fba1fb926ef49700d932c3a98730e952c8d413e",
        "urls": [
          "bzz-raw://d60cb6136fdf721632ca1244ce99c402d40b670e3b6d844f03452bdd96e00ce0",
          "dweb:/ipfs/QmaNdee5q68QcCr1qrPyakaeibQiKvLH2VSH7ZrxUe8gqi"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/tokenization/base/IncentivizedERC20.sol": {
        "keccak256": "0xeef558a6fb8826dd7eff89e1eb24072b5533825cbbfd3ee950623bb433ecabc6",
        "urls": [
          "bzz-raw://4453844f67a9d9339dda3d5081073188d45b8fd274aea524b239e3462ef67236",
          "dweb:/ipfs/QmVxGsuhu1NGFd5WqnGZns8pY1VEUALhMUTx76x6hxhkn8"
        ],
        "license": "AGPL-3.0"
      }
    },
    "version": 1
  },
  "ast": {
    "absolutePath": "src/protocol/tokenization/FToken.sol",
    "id": 70241,
    "exportedSymbols": {
      "ConfigTypes": [
        64693
      ],
      "ERC20Upgradeable": [
        27111
      ],
      "Errors": [
        57944
      ],
      "FToken": [
        70240
      ],
      "IAddressProvider": [
        46447
      ],
      "IConfigurator": [
        47089
      ],
      "IERC20Upgradeable": [
        27189
      ],
      "IFToken": [
        47449
      ],
      "ILendingPool": [
        48084
      ],
      "IPoolIncentivesController": [
        48421
      ],
      "IncentivizedERC20": [
        72276
      ],
      "Initializable": [
        26136
      ],
      "PercentageMath": [
        64257
      ],
      "SafeERC20Upgradeable": [
        27531
      ],
      "WadRayMath": [
        64503
      ]
    },
    "nodeType": "SourceUnit",
    "src": "37:23307:158",
    "nodes": [
      {
        "id": 69110,
        "nodeType": "PragmaDirective",
        "src": "37:23:158",
        "nodes": [],
        "literals": [
          "solidity",
          "0.8",
          ".16"
        ]
      },
      {
        "id": 69112,
        "nodeType": "ImportDirective",
        "src": "62:73:158",
        "nodes": [],
        "absolutePath": "src/interfaces/IAddressProvider.sol",
        "file": "../../interfaces/IAddressProvider.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 70241,
        "sourceUnit": 46448,
        "symbolAliases": [
          {
            "foreign": {
              "id": 69111,
              "name": "IAddressProvider",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 46447,
              "src": "71:16:158",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 69114,
        "nodeType": "ImportDirective",
        "src": "136:65:158",
        "nodes": [],
        "absolutePath": "src/interfaces/ILendingPool.sol",
        "file": "../../interfaces/ILendingPool.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 70241,
        "sourceUnit": 48085,
        "symbolAliases": [
          {
            "foreign": {
              "id": 69113,
              "name": "ILendingPool",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 48084,
              "src": "145:12:158",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 69116,
        "nodeType": "ImportDirective",
        "src": "202:67:158",
        "nodes": [],
        "absolutePath": "src/interfaces/IConfigurator.sol",
        "file": "../../interfaces/IConfigurator.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 70241,
        "sourceUnit": 47090,
        "symbolAliases": [
          {
            "foreign": {
              "id": 69115,
              "name": "IConfigurator",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 47089,
              "src": "211:13:158",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 69118,
        "nodeType": "ImportDirective",
        "src": "270:55:158",
        "nodes": [],
        "absolutePath": "src/interfaces/IFToken.sol",
        "file": "../../interfaces/IFToken.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 70241,
        "sourceUnit": 47450,
        "symbolAliases": [
          {
            "foreign": {
              "id": 69117,
              "name": "IFToken",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 47449,
              "src": "279:7:158",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 69120,
        "nodeType": "ImportDirective",
        "src": "326:91:158",
        "nodes": [],
        "absolutePath": "src/interfaces/IPoolIncentivesController.sol",
        "file": "../../interfaces/IPoolIncentivesController.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 70241,
        "sourceUnit": 48422,
        "symbolAliases": [
          {
            "foreign": {
              "id": 69119,
              "name": "IPoolIncentivesController",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 48421,
              "src": "335:25:158",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 69122,
        "nodeType": "ImportDirective",
        "src": "418:65:158",
        "nodes": [],
        "absolutePath": "src/protocol/tokenization/base/IncentivizedERC20.sol",
        "file": "./base/IncentivizedERC20.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 70241,
        "sourceUnit": 72277,
        "symbolAliases": [
          {
            "foreign": {
              "id": 69121,
              "name": "IncentivizedERC20",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 72276,
              "src": "427:17:158",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 69124,
        "nodeType": "ImportDirective",
        "src": "485:65:158",
        "nodes": [],
        "absolutePath": "src/protocol/libraries/types/ConfigTypes.sol",
        "file": "../libraries/types/ConfigTypes.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 70241,
        "sourceUnit": 64694,
        "symbolAliases": [
          {
            "foreign": {
              "id": 69123,
              "name": "ConfigTypes",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 64693,
              "src": "494:11:158",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 69126,
        "nodeType": "ImportDirective",
        "src": "551:70:158",
        "nodes": [],
        "absolutePath": "src/protocol/libraries/math/PercentageMath.sol",
        "file": "../libraries/math/PercentageMath.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 70241,
        "sourceUnit": 64258,
        "symbolAliases": [
          {
            "foreign": {
              "id": 69125,
              "name": "PercentageMath",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 64257,
              "src": "560:14:158",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 69128,
        "nodeType": "ImportDirective",
        "src": "622:62:158",
        "nodes": [],
        "absolutePath": "src/protocol/libraries/math/WadRayMath.sol",
        "file": "../libraries/math/WadRayMath.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 70241,
        "sourceUnit": 64504,
        "symbolAliases": [
          {
            "foreign": {
              "id": 69127,
              "name": "WadRayMath",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 64503,
              "src": "631:10:158",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 69130,
        "nodeType": "ImportDirective",
        "src": "685:57:158",
        "nodes": [],
        "absolutePath": "src/protocol/libraries/helpers/Errors.sol",
        "file": "../libraries/helpers/Errors.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 70241,
        "sourceUnit": 57945,
        "symbolAliases": [
          {
            "foreign": {
              "id": 69129,
              "name": "Errors",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 57944,
              "src": "694:6:158",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 69132,
        "nodeType": "ImportDirective",
        "src": "744:106:158",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 70241,
        "sourceUnit": 27190,
        "symbolAliases": [
          {
            "foreign": {
              "id": 69131,
              "name": "IERC20Upgradeable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 27189,
              "src": "753:17:158",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 69134,
        "nodeType": "ImportDirective",
        "src": "851:118:158",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/utils/SafeERC20Upgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 70241,
        "sourceUnit": 27532,
        "symbolAliases": [
          {
            "foreign": {
              "id": 69133,
              "name": "SafeERC20Upgradeable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 27531,
              "src": "860:20:158",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 69136,
        "nodeType": "ImportDirective",
        "src": "970:104:158",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 70241,
        "sourceUnit": 27112,
        "symbolAliases": [
          {
            "foreign": {
              "id": 69135,
              "name": "ERC20Upgradeable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 27111,
              "src": "979:16:158",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 69138,
        "nodeType": "ImportDirective",
        "src": "1075:98:158",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol",
        "file": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 70241,
        "sourceUnit": 26137,
        "symbolAliases": [
          {
            "foreign": {
              "id": 69137,
              "name": "Initializable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 26136,
              "src": "1084:13:158",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 70240,
        "nodeType": "ContractDefinition",
        "src": "1311:22032:158",
        "nodes": [
          {
            "id": 69148,
            "nodeType": "UsingForDirective",
            "src": "1378:29:158",
            "nodes": [],
            "global": false,
            "libraryName": {
              "id": 69146,
              "name": "WadRayMath",
              "nameLocations": [
                "1384:10:158"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 64503,
              "src": "1384:10:158"
            },
            "typeName": {
              "id": 69147,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1399:7:158",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 69151,
            "nodeType": "UsingForDirective",
            "src": "1412:33:158",
            "nodes": [],
            "global": false,
            "libraryName": {
              "id": 69149,
              "name": "PercentageMath",
              "nameLocations": [
                "1418:14:158"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 64257,
              "src": "1418:14:158"
            },
            "typeName": {
              "id": 69150,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1437:7:158",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 69155,
            "nodeType": "UsingForDirective",
            "src": "1450:49:158",
            "nodes": [],
            "global": false,
            "libraryName": {
              "id": 69152,
              "name": "SafeERC20Upgradeable",
              "nameLocations": [
                "1456:20:158"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 27531,
              "src": "1456:20:158"
            },
            "typeName": {
              "id": 69154,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 69153,
                "name": "IERC20Upgradeable",
                "nameLocations": [
                  "1481:17:158"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 27189,
                "src": "1481:17:158"
              },
              "referencedDeclaration": 27189,
              "src": "1481:17:158",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC20Upgradeable_$27189",
                "typeString": "contract IERC20Upgradeable"
              }
            }
          },
          {
            "id": 69158,
            "nodeType": "VariableDeclaration",
            "src": "1505:42:158",
            "nodes": [],
            "constant": false,
            "mutability": "mutable",
            "name": "_addressProvider",
            "nameLocation": "1531:16:158",
            "scope": 70240,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IAddressProvider_$46447",
              "typeString": "contract IAddressProvider"
            },
            "typeName": {
              "id": 69157,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 69156,
                "name": "IAddressProvider",
                "nameLocations": [
                  "1505:16:158"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 46447,
                "src": "1505:16:158"
              },
              "referencedDeclaration": 46447,
              "src": "1505:16:158",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IAddressProvider_$46447",
                "typeString": "contract IAddressProvider"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 69160,
            "nodeType": "VariableDeclaration",
            "src": "1554:25:158",
            "nodes": [],
            "constant": false,
            "mutability": "mutable",
            "name": "_creator",
            "nameLocation": "1571:8:158",
            "scope": 70240,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 69159,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1554:7:158",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 69162,
            "nodeType": "VariableDeclaration",
            "src": "1585:26:158",
            "nodes": [],
            "constant": false,
            "mutability": "mutable",
            "name": "_treasury",
            "nameLocation": "1602:9:158",
            "scope": 70240,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 69161,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1585:7:158",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 69164,
            "nodeType": "VariableDeclaration",
            "src": "1617:38:158",
            "nodes": [],
            "constant": false,
            "mutability": "mutable",
            "name": "_underlyingCollateral",
            "nameLocation": "1634:21:158",
            "scope": 70240,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 69163,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1617:7:158",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 69166,
            "nodeType": "VariableDeclaration",
            "src": "1661:33:158",
            "nodes": [],
            "constant": false,
            "mutability": "mutable",
            "name": "_underlyingAsset",
            "nameLocation": "1678:16:158",
            "scope": 70240,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 69165,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1661:7:158",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 69168,
            "nodeType": "VariableDeclaration",
            "src": "1700:38:158",
            "nodes": [],
            "constant": false,
            "mutability": "mutable",
            "name": "_underlyingMaxTokenId",
            "nameLocation": "1717:21:158",
            "scope": 70240,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 69167,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1700:7:158",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 69170,
            "nodeType": "VariableDeclaration",
            "src": "1744:38:158",
            "nodes": [],
            "constant": false,
            "mutability": "mutable",
            "name": "_underlyingMinTokenId",
            "nameLocation": "1761:21:158",
            "scope": 70240,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 69169,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1744:7:158",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 69172,
            "nodeType": "VariableDeclaration",
            "src": "1788:35:158",
            "nodes": [],
            "constant": false,
            "mutability": "mutable",
            "name": "_creatorPercentage",
            "nameLocation": "1805:18:158",
            "scope": 70240,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 69171,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1788:7:158",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 69174,
            "nodeType": "VariableDeclaration",
            "src": "1829:41:158",
            "nodes": [],
            "constant": false,
            "mutability": "mutable",
            "name": "_auctionCallerPercentage",
            "nameLocation": "1846:24:158",
            "scope": 70240,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 69173,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1829:7:158",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 69176,
            "nodeType": "VariableDeclaration",
            "src": "1876:42:158",
            "nodes": [],
            "constant": false,
            "mutability": "mutable",
            "name": "_auctionCreatorPercentage",
            "nameLocation": "1893:25:158",
            "scope": 70240,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 69175,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1876:7:158",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 69193,
            "nodeType": "ModifierDefinition",
            "src": "1925:145:158",
            "nodes": [],
            "body": {
              "id": 69192,
              "nodeType": "Block",
              "src": "1952:118:158",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 69186,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 69179,
                            "name": "_msgSender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28973,
                            "src": "1970:10:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                              "typeString": "function () view returns (address)"
                            }
                          },
                          "id": 69180,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1970:12:158",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 69183,
                                "name": "_getLendingPool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 70047,
                                "src": "1994:15:158",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$48084_$",
                                  "typeString": "function () view returns (contract ILendingPool)"
                                }
                              },
                              "id": 69184,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1994:17:158",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ILendingPool_$48084",
                                "typeString": "contract ILendingPool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_ILendingPool_$48084",
                                "typeString": "contract ILendingPool"
                              }
                            ],
                            "id": 69182,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1986:7:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 69181,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "1986:7:158",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 69185,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1986:26:158",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1970:42:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "expression": {
                          "id": 69187,
                          "name": "Errors",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 57944,
                          "src": "2014:6:158",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Errors_$57944_$",
                            "typeString": "type(library Errors)"
                          }
                        },
                        "id": 69188,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "2021:30:158",
                        "memberName": "CT_CALLER_MUST_BE_LENDING_POOL",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 57766,
                        "src": "2014:37:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 69178,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1962:7:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 69189,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1962:90:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 69190,
                  "nodeType": "ExpressionStatement",
                  "src": "1962:90:158"
                },
                {
                  "id": 69191,
                  "nodeType": "PlaceholderStatement",
                  "src": "2062:1:158"
                }
              ]
            },
            "name": "onlyLendingPool",
            "nameLocation": "1934:15:158",
            "parameters": {
              "id": 69177,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1949:2:158"
            },
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 69201,
            "nodeType": "FunctionDefinition",
            "src": "2129:53:158",
            "nodes": [],
            "body": {
              "id": 69200,
              "nodeType": "Block",
              "src": "2143:39:158",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 69197,
                      "name": "_disableInitializers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26117,
                      "src": "2153:20:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 69198,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2153:22:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 69199,
                  "nodeType": "ExpressionStatement",
                  "src": "2153:22:158"
                }
              ]
            },
            "documentation": {
              "id": 69194,
              "nodeType": "StructuredDocumentation",
              "src": "2076:48:158",
              "text": "@custom:oz-upgrades-unsafe-allow constructor"
            },
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "parameters": {
              "id": 69195,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2140:2:158"
            },
            "returnParameters": {
              "id": 69196,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2143:0:158"
            },
            "scope": 70240,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 69289,
            "nodeType": "FunctionDefinition",
            "src": "2274:1186:158",
            "nodes": [],
            "body": {
              "id": 69288,
              "nodeType": "Block",
              "src": "2453:1007:158",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 69215,
                          "name": "input",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 69208,
                          "src": "2488:5:158",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_InitReserveInput_$64606_calldata_ptr",
                            "typeString": "struct ConfigTypes.InitReserveInput calldata"
                          }
                        },
                        "id": 69216,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "2494:10:158",
                        "memberName": "fTokenName",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 64575,
                        "src": "2488:16:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      {
                        "expression": {
                          "id": 69217,
                          "name": "input",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 69208,
                          "src": "2506:5:158",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_InitReserveInput_$64606_calldata_ptr",
                            "typeString": "struct ConfigTypes.InitReserveInput calldata"
                          }
                        },
                        "id": 69218,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "2512:12:158",
                        "memberName": "fTokenSymbol",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 64577,
                        "src": "2506:18:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      {
                        "expression": {
                          "id": 69219,
                          "name": "input",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 69208,
                          "src": "2526:5:158",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_InitReserveInput_$64606_calldata_ptr",
                            "typeString": "struct ConfigTypes.InitReserveInput calldata"
                          }
                        },
                        "id": 69220,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "2532:23:158",
                        "memberName": "underlyingAssetDecimals",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 64571,
                        "src": "2526:29:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        },
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      ],
                      "id": 69214,
                      "name": "__IncentivizedERC20_init",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 72081,
                      "src": "2463:24:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_uint8_$returns$__$",
                        "typeString": "function (string memory,string memory,uint8)"
                      }
                    },
                    "id": 69221,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2463:93:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 69222,
                  "nodeType": "ExpressionStatement",
                  "src": "2463:93:158"
                },
                {
                  "expression": {
                    "id": 69226,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 69223,
                      "name": "_treasury",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 69162,
                      "src": "2567:9:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 69224,
                        "name": "input",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69208,
                        "src": "2579:5:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_InitReserveInput_$64606_calldata_ptr",
                          "typeString": "struct ConfigTypes.InitReserveInput calldata"
                        }
                      },
                      "id": 69225,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2585:8:158",
                      "memberName": "treasury",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 64595,
                      "src": "2579:14:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2567:26:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 69227,
                  "nodeType": "ExpressionStatement",
                  "src": "2567:26:158"
                },
                {
                  "expression": {
                    "id": 69231,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 69228,
                      "name": "_creator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 69160,
                      "src": "2603:8:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 69229,
                        "name": "input",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69208,
                        "src": "2614:5:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_InitReserveInput_$64606_calldata_ptr",
                          "typeString": "struct ConfigTypes.InitReserveInput calldata"
                        }
                      },
                      "id": 69230,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2620:7:158",
                      "memberName": "creator",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 64597,
                      "src": "2614:13:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2603:24:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 69232,
                  "nodeType": "ExpressionStatement",
                  "src": "2603:24:158"
                },
                {
                  "expression": {
                    "id": 69236,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 69233,
                      "name": "_creatorPercentage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 69172,
                      "src": "2637:18:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 69234,
                        "name": "input",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69208,
                        "src": "2658:5:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_InitReserveInput_$64606_calldata_ptr",
                          "typeString": "struct ConfigTypes.InitReserveInput calldata"
                        }
                      },
                      "id": 69235,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2664:17:158",
                      "memberName": "creatorPercentage",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 64599,
                      "src": "2658:23:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2637:44:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 69237,
                  "nodeType": "ExpressionStatement",
                  "src": "2637:44:158"
                },
                {
                  "expression": {
                    "id": 69241,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 69238,
                      "name": "_auctionCallerPercentage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 69174,
                      "src": "2691:24:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 69239,
                        "name": "input",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69208,
                        "src": "2718:5:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_InitReserveInput_$64606_calldata_ptr",
                          "typeString": "struct ConfigTypes.InitReserveInput calldata"
                        }
                      },
                      "id": 69240,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2724:23:158",
                      "memberName": "auctionCallerPercentage",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 64601,
                      "src": "2718:29:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2691:56:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 69242,
                  "nodeType": "ExpressionStatement",
                  "src": "2691:56:158"
                },
                {
                  "expression": {
                    "id": 69246,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 69243,
                      "name": "_auctionCreatorPercentage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 69176,
                      "src": "2757:25:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 69244,
                        "name": "input",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69208,
                        "src": "2785:5:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_InitReserveInput_$64606_calldata_ptr",
                          "typeString": "struct ConfigTypes.InitReserveInput calldata"
                        }
                      },
                      "id": 69245,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2791:24:158",
                      "memberName": "auctionCreatorPercentage",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 64603,
                      "src": "2785:30:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2757:58:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 69247,
                  "nodeType": "ExpressionStatement",
                  "src": "2757:58:158"
                },
                {
                  "expression": {
                    "id": 69251,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 69248,
                      "name": "_underlyingAsset",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 69166,
                      "src": "2825:16:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 69249,
                        "name": "input",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69208,
                        "src": "2844:5:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_InitReserveInput_$64606_calldata_ptr",
                          "typeString": "struct ConfigTypes.InitReserveInput calldata"
                        }
                      },
                      "id": 69250,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2850:15:158",
                      "memberName": "underlyingAsset",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 64565,
                      "src": "2844:21:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2825:40:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 69252,
                  "nodeType": "ExpressionStatement",
                  "src": "2825:40:158"
                },
                {
                  "expression": {
                    "id": 69256,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 69253,
                      "name": "_underlyingCollateral",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 69164,
                      "src": "2875:21:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 69254,
                        "name": "input",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69208,
                        "src": "2899:5:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_InitReserveInput_$64606_calldata_ptr",
                          "typeString": "struct ConfigTypes.InitReserveInput calldata"
                        }
                      },
                      "id": 69255,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2905:20:158",
                      "memberName": "underlyingCollateral",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 64555,
                      "src": "2899:26:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2875:50:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 69257,
                  "nodeType": "ExpressionStatement",
                  "src": "2875:50:158"
                },
                {
                  "expression": {
                    "id": 69261,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 69258,
                      "name": "_underlyingMaxTokenId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 69168,
                      "src": "2935:21:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 69259,
                        "name": "input",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69208,
                        "src": "2959:5:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_InitReserveInput_$64606_calldata_ptr",
                          "typeString": "struct ConfigTypes.InitReserveInput calldata"
                        }
                      },
                      "id": 69260,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2965:20:158",
                      "memberName": "underlyingMaxTokenId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 64561,
                      "src": "2959:26:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2935:50:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 69262,
                  "nodeType": "ExpressionStatement",
                  "src": "2935:50:158"
                },
                {
                  "expression": {
                    "id": 69266,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 69263,
                      "name": "_underlyingMinTokenId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 69170,
                      "src": "2995:21:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 69264,
                        "name": "input",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69208,
                        "src": "3019:5:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_InitReserveInput_$64606_calldata_ptr",
                          "typeString": "struct ConfigTypes.InitReserveInput calldata"
                        }
                      },
                      "id": 69265,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "3025:20:158",
                      "memberName": "underlyingMinTokenId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 64563,
                      "src": "3019:26:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2995:50:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 69267,
                  "nodeType": "ExpressionStatement",
                  "src": "2995:50:158"
                },
                {
                  "expression": {
                    "id": 69270,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 69268,
                      "name": "_addressProvider",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 69158,
                      "src": "3055:16:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAddressProvider_$46447",
                        "typeString": "contract IAddressProvider"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 69269,
                      "name": "addressProvider",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 69205,
                      "src": "3074:15:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAddressProvider_$46447",
                        "typeString": "contract IAddressProvider"
                      }
                    },
                    "src": "3055:34:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAddressProvider_$46447",
                      "typeString": "contract IAddressProvider"
                    }
                  },
                  "id": 69271,
                  "nodeType": "ExpressionStatement",
                  "src": "3055:34:158"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 69273,
                        "name": "_underlyingCollateral",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69164,
                        "src": "3131:21:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 69274,
                        "name": "_underlyingAsset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69166,
                        "src": "3166:16:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 69275,
                            "name": "_addressProvider",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 69158,
                            "src": "3196:16:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAddressProvider_$46447",
                              "typeString": "contract IAddressProvider"
                            }
                          },
                          "id": 69276,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "3213:14:158",
                          "memberName": "getLendingPool",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 46256,
                          "src": "3196:31:158",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                            "typeString": "function () view external returns (address)"
                          }
                        },
                        "id": 69277,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3196:33:158",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 69278,
                            "name": "_addressProvider",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 69158,
                            "src": "3243:16:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAddressProvider_$46447",
                              "typeString": "contract IAddressProvider"
                            }
                          },
                          "id": 69279,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "3260:27:158",
                          "memberName": "getPoolIncentivesController",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 46361,
                          "src": "3243:44:158",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                            "typeString": "function () view external returns (address)"
                          }
                        },
                        "id": 69280,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3243:46:158",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 69281,
                        "name": "_treasury",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69162,
                        "src": "3303:9:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 69282,
                        "name": "_creator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69160,
                        "src": "3326:8:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 69283,
                        "name": "_creatorPercentage",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69172,
                        "src": "3348:18:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 69284,
                        "name": "_auctionCallerPercentage",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69174,
                        "src": "3380:24:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 69285,
                        "name": "_auctionCreatorPercentage",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69176,
                        "src": "3418:25:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 69272,
                      "name": "Initialized",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        47255,
                        25982
                      ],
                      "referencedDeclaration": 47255,
                      "src": "3106:11:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,address,address,address,uint256,uint256,uint256)"
                      }
                    },
                    "id": 69286,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3106:347:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 69287,
                  "nodeType": "EmitStatement",
                  "src": "3101:352:158"
                }
              ]
            },
            "baseFunctions": [
              47305
            ],
            "documentation": {
              "id": 69202,
              "nodeType": "StructuredDocumentation",
              "src": "2188:81:158",
              "text": " @dev Initializes the fToken\n @param input The reserve input"
            },
            "functionSelector": "1d165564",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 69212,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 69211,
                  "name": "initializer",
                  "nameLocations": [
                    "2437:11:158"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 26038,
                  "src": "2437:11:158"
                },
                "nodeType": "ModifierInvocation",
                "src": "2437:11:158"
              }
            ],
            "name": "initialize",
            "nameLocation": "2283:10:158",
            "overrides": {
              "id": 69210,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2420:8:158"
            },
            "parameters": {
              "id": 69209,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 69205,
                  "mutability": "mutable",
                  "name": "addressProvider",
                  "nameLocation": "2320:15:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 69289,
                  "src": "2303:32:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IAddressProvider_$46447",
                    "typeString": "contract IAddressProvider"
                  },
                  "typeName": {
                    "id": 69204,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 69203,
                      "name": "IAddressProvider",
                      "nameLocations": [
                        "2303:16:158"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 46447,
                      "src": "2303:16:158"
                    },
                    "referencedDeclaration": 46447,
                    "src": "2303:16:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAddressProvider_$46447",
                      "typeString": "contract IAddressProvider"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 69208,
                  "mutability": "mutable",
                  "name": "input",
                  "nameLocation": "2383:5:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 69289,
                  "src": "2345:43:158",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_InitReserveInput_$64606_calldata_ptr",
                    "typeString": "struct ConfigTypes.InitReserveInput"
                  },
                  "typeName": {
                    "id": 69207,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 69206,
                      "name": "ConfigTypes.InitReserveInput",
                      "nameLocations": [
                        "2345:11:158",
                        "2357:16:158"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 64606,
                      "src": "2345:28:158"
                    },
                    "referencedDeclaration": 64606,
                    "src": "2345:28:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_InitReserveInput_$64606_storage_ptr",
                      "typeString": "struct ConfigTypes.InitReserveInput"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2293:101:158"
            },
            "returnParameters": {
              "id": 69213,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2453:0:158"
            },
            "scope": 70240,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 69340,
            "nodeType": "FunctionDefinition",
            "src": "3926:507:158",
            "nodes": [],
            "body": {
              "id": 69339,
              "nodeType": "Block",
              "src": "4119:314:158",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    69305
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 69305,
                      "mutability": "mutable",
                      "name": "amountScaled",
                      "nameLocation": "4137:12:158",
                      "nodeType": "VariableDeclaration",
                      "scope": 69339,
                      "src": "4129:20:158",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 69304,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4129:7:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 69310,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 69308,
                        "name": "index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69298,
                        "src": "4166:5:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 69306,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69296,
                        "src": "4152:6:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 69307,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4159:6:158",
                      "memberName": "rayDiv",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 64411,
                      "src": "4152:13:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 69309,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4152:20:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4129:43:158"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 69314,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 69312,
                          "name": "amountScaled",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 69305,
                          "src": "4190:12:158",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 69313,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4206:1:158",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "4190:17:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "expression": {
                          "id": 69315,
                          "name": "Errors",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 57944,
                          "src": "4209:6:158",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Errors_$57944_$",
                            "typeString": "type(library Errors)"
                          }
                        },
                        "id": 69316,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "4216:22:158",
                        "memberName": "CT_INVALID_BURN_AMOUNT",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 57772,
                        "src": "4209:29:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 69311,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "4182:7:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 69317,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4182:57:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 69318,
                  "nodeType": "ExpressionStatement",
                  "src": "4182:57:158"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 69320,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69292,
                        "src": "4255:4:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 69321,
                        "name": "amountScaled",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69305,
                        "src": "4261:12:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 69319,
                      "name": "_burn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        72275
                      ],
                      "referencedDeclaration": 72275,
                      "src": "4249:5:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 69322,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4249:25:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 69323,
                  "nodeType": "ExpressionStatement",
                  "src": "4249:25:158"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 69328,
                        "name": "receiverOfUnderlying",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69294,
                        "src": "4334:20:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 69329,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69296,
                        "src": "4356:6:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 69325,
                            "name": "_underlyingAsset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 69166,
                            "src": "4303:16:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 69324,
                          "name": "IERC20Upgradeable",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27189,
                          "src": "4285:17:158",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC20Upgradeable_$27189_$",
                            "typeString": "type(contract IERC20Upgradeable)"
                          }
                        },
                        "id": 69326,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4285:35:158",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Upgradeable_$27189",
                          "typeString": "contract IERC20Upgradeable"
                        }
                      },
                      "id": 69327,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4321:12:158",
                      "memberName": "safeTransfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27282,
                      "src": "4285:48:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20Upgradeable_$27189_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20Upgradeable_$27189_$",
                        "typeString": "function (contract IERC20Upgradeable,address,uint256)"
                      }
                    },
                    "id": 69330,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4285:78:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 69331,
                  "nodeType": "ExpressionStatement",
                  "src": "4285:78:158"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 69333,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69292,
                        "src": "4384:4:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 69334,
                        "name": "receiverOfUnderlying",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69294,
                        "src": "4390:20:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 69335,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69296,
                        "src": "4412:6:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 69336,
                        "name": "index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69298,
                        "src": "4420:5:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 69332,
                      "name": "Burn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 47275,
                      "src": "4379:4:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256)"
                      }
                    },
                    "id": 69337,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4379:47:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 69338,
                  "nodeType": "EmitStatement",
                  "src": "4374:52:158"
                }
              ]
            },
            "baseFunctions": [
              47327
            ],
            "documentation": {
              "id": 69290,
              "nodeType": "StructuredDocumentation",
              "src": "3466:455:158",
              "text": " @dev Burns fTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\n - Only callable by the LendingPool, as extra state updates there need to be managed\n @param user The owner of the fTokens, getting them burned\n @param receiverOfUnderlying The address that will receive the underlying\n @param amount The amount being burned\n @param index The new liquidity index of the reserve*"
            },
            "functionSelector": "d7020d0a",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 69302,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 69301,
                  "name": "onlyLendingPool",
                  "nameLocations": [
                    "4098:15:158"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 69193,
                  "src": "4098:15:158"
                },
                "nodeType": "ModifierInvocation",
                "src": "4098:15:158"
              }
            ],
            "name": "burn",
            "nameLocation": "3935:4:158",
            "overrides": {
              "id": 69300,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4080:8:158"
            },
            "parameters": {
              "id": 69299,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 69292,
                  "mutability": "mutable",
                  "name": "user",
                  "nameLocation": "3957:4:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 69340,
                  "src": "3949:12:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 69291,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3949:7:158",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 69294,
                  "mutability": "mutable",
                  "name": "receiverOfUnderlying",
                  "nameLocation": "3979:20:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 69340,
                  "src": "3971:28:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 69293,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3971:7:158",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 69296,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "4017:6:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 69340,
                  "src": "4009:14:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 69295,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4009:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 69298,
                  "mutability": "mutable",
                  "name": "index",
                  "nameLocation": "4041:5:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 69340,
                  "src": "4033:13:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 69297,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4033:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3939:113:158"
            },
            "returnParameters": {
              "id": 69303,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4119:0:158"
            },
            "scope": 70240,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 69393,
            "nodeType": "FunctionDefinition",
            "src": "4827:478:158",
            "nodes": [],
            "body": {
              "id": 69392,
              "nodeType": "Block",
              "src": "5006:299:158",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    69356
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 69356,
                      "mutability": "mutable",
                      "name": "previousBalance",
                      "nameLocation": "5024:15:158",
                      "nodeType": "VariableDeclaration",
                      "scope": 69392,
                      "src": "5016:23:158",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 69355,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5016:7:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 69361,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 69359,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69343,
                        "src": "5058:4:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 69357,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "5042:5:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_super$_FToken_$70240_$",
                          "typeString": "type(contract super FToken)"
                        }
                      },
                      "id": 69358,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5048:9:158",
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 26618,
                      "src": "5042:15:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view returns (uint256)"
                      }
                    },
                    "id": 69360,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5042:21:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5016:47:158"
                },
                {
                  "assignments": [
                    69363
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 69363,
                      "mutability": "mutable",
                      "name": "amountScaled",
                      "nameLocation": "5082:12:158",
                      "nodeType": "VariableDeclaration",
                      "scope": 69392,
                      "src": "5074:20:158",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 69362,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5074:7:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 69368,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 69366,
                        "name": "index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69347,
                        "src": "5111:5:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 69364,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69345,
                        "src": "5097:6:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 69365,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5104:6:158",
                      "memberName": "rayDiv",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 64411,
                      "src": "5097:13:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 69367,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5097:20:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5074:43:158"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 69372,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 69370,
                          "name": "amountScaled",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 69363,
                          "src": "5135:12:158",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 69371,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5151:1:158",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "5135:17:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "expression": {
                          "id": 69373,
                          "name": "Errors",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 57944,
                          "src": "5154:6:158",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Errors_$57944_$",
                            "typeString": "type(library Errors)"
                          }
                        },
                        "id": 69374,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "5161:22:158",
                        "memberName": "CT_INVALID_MINT_AMOUNT",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 57769,
                        "src": "5154:29:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 69369,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "5127:7:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 69375,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5127:57:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 69376,
                  "nodeType": "ExpressionStatement",
                  "src": "5127:57:158"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 69378,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69343,
                        "src": "5200:4:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 69379,
                        "name": "amountScaled",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69363,
                        "src": "5206:12:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 69377,
                      "name": "_mint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        72226
                      ],
                      "referencedDeclaration": 72226,
                      "src": "5194:5:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 69380,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5194:25:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 69381,
                  "nodeType": "ExpressionStatement",
                  "src": "5194:25:158"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 69383,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69343,
                        "src": "5240:4:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 69384,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69345,
                        "src": "5246:6:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 69385,
                        "name": "index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69347,
                        "src": "5254:5:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 69382,
                      "name": "Mint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 47264,
                      "src": "5235:4:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256)"
                      }
                    },
                    "id": 69386,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5235:25:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 69387,
                  "nodeType": "EmitStatement",
                  "src": "5230:30:158"
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 69390,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 69388,
                      "name": "previousBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 69356,
                      "src": "5278:15:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 69389,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5297:1:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "5278:20:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 69354,
                  "id": 69391,
                  "nodeType": "Return",
                  "src": "5271:27:158"
                }
              ]
            },
            "baseFunctions": [
              47316
            ],
            "documentation": {
              "id": 69341,
              "nodeType": "StructuredDocumentation",
              "src": "4439:383:158",
              "text": " @dev Mints `amount` fTokens to `user`\n - Only callable by the LendingPool, as extra state updates there need to be managed\n @param user The address receiving the minted tokens\n @param amount The amount of tokens getting minted\n @param index The new liquidity index of the reserve\n @return `true` if the the previous balance of the user was 0"
            },
            "functionSelector": "156e29f6",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 69351,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 69350,
                  "name": "onlyLendingPool",
                  "nameLocations": [
                    "4961:15:158"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 69193,
                  "src": "4961:15:158"
                },
                "nodeType": "ModifierInvocation",
                "src": "4961:15:158"
              }
            ],
            "name": "mint",
            "nameLocation": "4836:4:158",
            "overrides": {
              "id": 69349,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4943:8:158"
            },
            "parameters": {
              "id": 69348,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 69343,
                  "mutability": "mutable",
                  "name": "user",
                  "nameLocation": "4858:4:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 69393,
                  "src": "4850:12:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 69342,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4850:7:158",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 69345,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "4880:6:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 69393,
                  "src": "4872:14:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 69344,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4872:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 69347,
                  "mutability": "mutable",
                  "name": "index",
                  "nameLocation": "4904:5:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 69393,
                  "src": "4896:13:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 69346,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4896:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4840:75:158"
            },
            "returnParameters": {
              "id": 69354,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 69353,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 69393,
                  "src": "4995:4:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 69352,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4995:4:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4994:6:158"
            },
            "scope": 70240,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 69423,
            "nodeType": "FunctionDefinition",
            "src": "5526:395:158",
            "nodes": [],
            "body": {
              "id": 69422,
              "nodeType": "Block",
              "src": "5672:249:158",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 69407,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5723:1:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 69406,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5715:7:158",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 69405,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "5715:7:158",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 69408,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5715:10:158",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 69411,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5754:1:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 69410,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5746:7:158",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 69409,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "5746:7:158",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 69412,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5746:10:158",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 69415,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5787:1:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 69414,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5779:7:158",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 69413,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "5779:7:158",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 69416,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5779:10:158",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 69417,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69396,
                        "src": "5811:6:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "hexValue": "30",
                        "id": 69418,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5844:1:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "id": 69419,
                        "name": "index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69398,
                        "src": "5885:5:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 69404,
                      "name": "_mintToStakeholders",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 69645,
                      "src": "5682:19:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256,uint256,uint256)"
                      }
                    },
                    "id": 69420,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5682:232:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 69421,
                  "nodeType": "ExpressionStatement",
                  "src": "5682:232:158"
                }
              ]
            },
            "baseFunctions": [
              47334
            ],
            "documentation": {
              "id": 69394,
              "nodeType": "StructuredDocumentation",
              "src": "5311:210:158",
              "text": " @dev Mints fTokens to the stakeholders\n - Only callable by the LendingPool\n @param amount The amount of tokens getting minted\n @param index The new liquidity index of the reserve"
            },
            "functionSelector": "e8f7a1a5",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 69402,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 69401,
                  "name": "onlyLendingPool",
                  "nameLocations": [
                    "5651:15:158"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 69193,
                  "src": "5651:15:158"
                },
                "nodeType": "ModifierInvocation",
                "src": "5651:15:158"
              }
            ],
            "name": "mintVariableDebtRepaymentToStakeholders",
            "nameLocation": "5535:39:158",
            "overrides": {
              "id": 69400,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5633:8:158"
            },
            "parameters": {
              "id": 69399,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 69396,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "5583:6:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 69423,
                  "src": "5575:14:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 69395,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5575:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 69398,
                  "mutability": "mutable",
                  "name": "index",
                  "nameLocation": "5599:5:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 69423,
                  "src": "5591:13:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 69397,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5591:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5574:31:158"
            },
            "returnParameters": {
              "id": 69403,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5672:0:158"
            },
            "scope": 70240,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 69451,
            "nodeType": "FunctionDefinition",
            "src": "5927:406:158",
            "nodes": [],
            "body": {
              "id": 69450,
              "nodeType": "Block",
              "src": "6084:249:158",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 69436,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69425,
                        "src": "6127:4:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 69439,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6166:1:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 69438,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6158:7:158",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 69437,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "6158:7:158",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 69440,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6158:10:158",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 69443,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6199:1:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 69442,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6191:7:158",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 69441,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "6191:7:158",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 69444,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6191:10:158",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 69445,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69427,
                        "src": "6223:6:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "hexValue": "30",
                        "id": 69446,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6256:1:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "id": 69447,
                        "name": "index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69429,
                        "src": "6297:5:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 69435,
                      "name": "_mintToStakeholders",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 69645,
                      "src": "6094:19:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256,uint256,uint256)"
                      }
                    },
                    "id": 69448,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6094:232:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 69449,
                  "nodeType": "ExpressionStatement",
                  "src": "6094:232:158"
                }
              ]
            },
            "baseFunctions": [
              47343
            ],
            "functionSelector": "679d0095",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 69433,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 69432,
                  "name": "onlyLendingPool",
                  "nameLocations": [
                    "6063:15:158"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 69193,
                  "src": "6063:15:158"
                },
                "nodeType": "ModifierInvocation",
                "src": "6063:15:158"
              }
            ],
            "name": "mintStableDebtRepaymentToStakeholders",
            "nameLocation": "5936:37:158",
            "overrides": {
              "id": 69431,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6045:8:158"
            },
            "parameters": {
              "id": 69430,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 69425,
                  "mutability": "mutable",
                  "name": "user",
                  "nameLocation": "5982:4:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 69451,
                  "src": "5974:12:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 69424,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5974:7:158",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 69427,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "5996:6:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 69451,
                  "src": "5988:14:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 69426,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5988:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 69429,
                  "mutability": "mutable",
                  "name": "index",
                  "nameLocation": "6012:5:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 69451,
                  "src": "6004:13:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 69428,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6004:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5973:45:158"
            },
            "returnParameters": {
              "id": 69434,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6084:0:158"
            },
            "scope": 70240,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 69479,
            "nodeType": "FunctionDefinition",
            "src": "6339:537:158",
            "nodes": [],
            "body": {
              "id": 69478,
              "nodeType": "Block",
              "src": "6603:273:158",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 69470,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69453,
                        "src": "6646:4:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 69471,
                        "name": "caller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69455,
                        "src": "6681:6:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 69472,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69457,
                        "src": "6718:5:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 69473,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69459,
                        "src": "6754:6:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 69474,
                        "name": "liquidationFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69461,
                        "src": "6791:14:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 69475,
                        "name": "index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69463,
                        "src": "6836:5:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 69469,
                      "name": "_mintToStakeholders",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 69645,
                      "src": "6613:19:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256,uint256,uint256)"
                      }
                    },
                    "id": 69476,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6613:256:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 69477,
                  "nodeType": "ExpressionStatement",
                  "src": "6613:256:158"
                }
              ]
            },
            "baseFunctions": [
              47358
            ],
            "functionSelector": "30c1e38b",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 69467,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 69466,
                  "name": "onlyLendingPool",
                  "nameLocations": [
                    "6582:15:158"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 69193,
                  "src": "6582:15:158"
                },
                "nodeType": "ModifierInvocation",
                "src": "6582:15:158"
              }
            ],
            "name": "mintAuctionPaymentToStakeholders",
            "nameLocation": "6348:32:158",
            "overrides": {
              "id": 69465,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6564:8:158"
            },
            "parameters": {
              "id": 69464,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 69453,
                  "mutability": "mutable",
                  "name": "user",
                  "nameLocation": "6398:4:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 69479,
                  "src": "6390:12:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 69452,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6390:7:158",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 69455,
                  "mutability": "mutable",
                  "name": "caller",
                  "nameLocation": "6421:6:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 69479,
                  "src": "6413:14:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 69454,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6413:7:158",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 69457,
                  "mutability": "mutable",
                  "name": "owner",
                  "nameLocation": "6446:5:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 69479,
                  "src": "6438:13:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 69456,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6438:7:158",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 69459,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "6469:6:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 69479,
                  "src": "6461:14:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 69458,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6461:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 69461,
                  "mutability": "mutable",
                  "name": "liquidationFee",
                  "nameLocation": "6494:14:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 69479,
                  "src": "6486:22:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 69460,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6486:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 69463,
                  "mutability": "mutable",
                  "name": "index",
                  "nameLocation": "6526:5:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 69479,
                  "src": "6518:13:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 69462,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6518:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6380:157:158"
            },
            "returnParameters": {
              "id": 69468,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6603:0:158"
            },
            "scope": 70240,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 69645,
            "nodeType": "FunctionDefinition",
            "src": "7162:1885:158",
            "nodes": [],
            "body": {
              "id": 69644,
              "nodeType": "Block",
              "src": "7373:1674:158",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 69501,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 69497,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 69495,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69488,
                        "src": "7387:6:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 69496,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7397:1:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "7387:11:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 69500,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 69498,
                        "name": "liquidationFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69490,
                        "src": "7402:14:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 69499,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7420:1:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "7402:19:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "7387:34:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 69504,
                  "nodeType": "IfStatement",
                  "src": "7383:71:158",
                  "trueBody": {
                    "id": 69503,
                    "nodeType": "Block",
                    "src": "7423:31:158",
                    "statements": [
                      {
                        "functionReturnParameters": 69494,
                        "id": 69502,
                        "nodeType": "Return",
                        "src": "7437:7:158"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    69506
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 69506,
                      "mutability": "mutable",
                      "name": "creator",
                      "nameLocation": "7472:7:158",
                      "nodeType": "VariableDeclaration",
                      "scope": 69644,
                      "src": "7464:15:158",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 69505,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "7464:7:158",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 69508,
                  "initialValue": {
                    "id": 69507,
                    "name": "_creator",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 69160,
                    "src": "7482:8:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7464:26:158"
                },
                {
                  "assignments": [
                    69510
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 69510,
                      "mutability": "mutable",
                      "name": "treasury",
                      "nameLocation": "7508:8:158",
                      "nodeType": "VariableDeclaration",
                      "scope": 69644,
                      "src": "7500:16:158",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 69509,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "7500:7:158",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 69512,
                  "initialValue": {
                    "id": 69511,
                    "name": "_treasury",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 69162,
                    "src": "7519:9:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7500:28:158"
                },
                {
                  "assignments": [
                    69514
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 69514,
                      "mutability": "mutable",
                      "name": "callerAmount",
                      "nameLocation": "7546:12:158",
                      "nodeType": "VariableDeclaration",
                      "scope": 69644,
                      "src": "7538:20:158",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 69513,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7538:7:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 69515,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7538:20:158"
                },
                {
                  "assignments": [
                    69517
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 69517,
                      "mutability": "mutable",
                      "name": "creatorAmount",
                      "nameLocation": "7576:13:158",
                      "nodeType": "VariableDeclaration",
                      "scope": 69644,
                      "src": "7568:21:158",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 69516,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7568:7:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 69518,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7568:21:158"
                },
                {
                  "assignments": [
                    69520
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 69520,
                      "mutability": "mutable",
                      "name": "treasuryAmount",
                      "nameLocation": "7608:14:158",
                      "nodeType": "VariableDeclaration",
                      "scope": 69644,
                      "src": "7600:22:158",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 69519,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7600:7:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 69521,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7600:22:158"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 69527,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 69522,
                      "name": "caller",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 69484,
                      "src": "7638:6:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 69525,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7656:1:158",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 69524,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "7648:7:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 69523,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7648:7:158",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 69526,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7648:10:158",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "7638:20:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 69546,
                    "nodeType": "Block",
                    "src": "7776:203:158",
                    "statements": [
                      {
                        "expression": {
                          "id": 69544,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "components": [
                              {
                                "id": 69537,
                                "name": "callerAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 69514,
                                "src": "7832:12:158",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 69538,
                                "name": "creatorAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 69517,
                                "src": "7863:13:158",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 69539,
                                "name": "treasuryAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 69520,
                                "src": "7895:14:158",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 69540,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "7814:109:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                              "typeString": "tuple(uint256,uint256,uint256)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 69542,
                                "name": "liquidationFee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 69490,
                                "src": "7953:14:158",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 69541,
                              "name": "_splitWithCallerAndCreator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70239,
                              "src": "7926:26:158",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$",
                                "typeString": "function (uint256) view returns (uint256,uint256,uint256)"
                              }
                            },
                            "id": 69543,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7926:42:158",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                              "typeString": "tuple(uint256,uint256,uint256)"
                            }
                          },
                          "src": "7814:154:158",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 69545,
                        "nodeType": "ExpressionStatement",
                        "src": "7814:154:158"
                      }
                    ]
                  },
                  "id": 69547,
                  "nodeType": "IfStatement",
                  "src": "7634:345:158",
                  "trueBody": {
                    "id": 69536,
                    "nodeType": "Block",
                    "src": "7660:110:158",
                    "statements": [
                      {
                        "expression": {
                          "id": 69534,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "components": [
                              {
                                "id": 69528,
                                "name": "creatorAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 69517,
                                "src": "7701:13:158",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 69529,
                                "name": "treasuryAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 69520,
                                "src": "7716:14:158",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 69530,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "7700:31:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                              "typeString": "tuple(uint256,uint256)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 69532,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 69488,
                                "src": "7752:6:158",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 69531,
                              "name": "_splitWithCreator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70199,
                              "src": "7734:17:158",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                                "typeString": "function (uint256) view returns (uint256,uint256)"
                              }
                            },
                            "id": 69533,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7734:25:158",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                              "typeString": "tuple(uint256,uint256)"
                            }
                          },
                          "src": "7700:59:158",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 69535,
                        "nodeType": "ExpressionStatement",
                        "src": "7700:59:158"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 69549,
                        "name": "treasury",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69510,
                        "src": "8324:8:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 69552,
                            "name": "index",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 69492,
                            "src": "8356:5:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 69550,
                            "name": "treasuryAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 69520,
                            "src": "8334:14:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 69551,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "8349:6:158",
                          "memberName": "rayDiv",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 64411,
                          "src": "8334:21:158",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 69553,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8334:28:158",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 69548,
                      "name": "_mint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        72226
                      ],
                      "referencedDeclaration": 72226,
                      "src": "8318:5:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 69554,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8318:45:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 69555,
                  "nodeType": "ExpressionStatement",
                  "src": "8318:45:158"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 69557,
                        "name": "creator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69506,
                        "src": "8379:7:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 69560,
                            "name": "index",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 69492,
                            "src": "8409:5:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 69558,
                            "name": "creatorAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 69517,
                            "src": "8388:13:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 69559,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "8402:6:158",
                          "memberName": "rayDiv",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 64411,
                          "src": "8388:20:158",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 69561,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8388:27:158",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 69556,
                      "name": "_mint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        72226
                      ],
                      "referencedDeclaration": 72226,
                      "src": "8373:5:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 69562,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8373:43:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 69563,
                  "nodeType": "ExpressionStatement",
                  "src": "8373:43:158"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 69565,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69482,
                        "src": "8449:4:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 69566,
                        "name": "treasury",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69510,
                        "src": "8455:8:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 69567,
                        "name": "treasuryAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69520,
                        "src": "8465:14:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 69564,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27123,
                      "src": "8440:8:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 69568,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8440:40:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 69569,
                  "nodeType": "EmitStatement",
                  "src": "8435:45:158"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 69571,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69482,
                        "src": "8504:4:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 69572,
                        "name": "creator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69506,
                        "src": "8510:7:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 69573,
                        "name": "creatorAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69517,
                        "src": "8519:13:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 69570,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27123,
                      "src": "8495:8:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 69574,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8495:38:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 69575,
                  "nodeType": "EmitStatement",
                  "src": "8490:43:158"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 69577,
                        "name": "treasury",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69510,
                        "src": "8562:8:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 69578,
                        "name": "treasuryAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69520,
                        "src": "8572:14:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 69579,
                        "name": "index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69492,
                        "src": "8588:5:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 69576,
                      "name": "Mint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 47264,
                      "src": "8557:4:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256)"
                      }
                    },
                    "id": 69580,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8557:37:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 69581,
                  "nodeType": "EmitStatement",
                  "src": "8552:42:158"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 69583,
                        "name": "creator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69506,
                        "src": "8614:7:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 69584,
                        "name": "creatorAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69517,
                        "src": "8623:13:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 69585,
                        "name": "index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69492,
                        "src": "8638:5:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 69582,
                      "name": "Mint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 47264,
                      "src": "8609:4:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256)"
                      }
                    },
                    "id": 69586,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8609:35:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 69587,
                  "nodeType": "EmitStatement",
                  "src": "8604:40:158"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 69593,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 69588,
                      "name": "caller",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 69484,
                      "src": "8659:6:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 69591,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8677:1:158",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 69590,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "8669:7:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 69589,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8669:7:158",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 69592,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8669:10:158",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "8659:20:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 69615,
                  "nodeType": "IfStatement",
                  "src": "8655:199:158",
                  "trueBody": {
                    "id": 69614,
                    "nodeType": "Block",
                    "src": "8681:173:158",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 69595,
                              "name": "caller",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 69484,
                              "src": "8701:6:158",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 69598,
                                  "name": "index",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 69492,
                                  "src": "8729:5:158",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 69596,
                                  "name": "callerAmount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 69514,
                                  "src": "8709:12:158",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 69597,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "8722:6:158",
                                "memberName": "rayDiv",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 64411,
                                "src": "8709:19:158",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 69599,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8709:26:158",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 69594,
                            "name": "_mint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              72226
                            ],
                            "referencedDeclaration": 72226,
                            "src": "8695:5:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 69600,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8695:41:158",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 69601,
                        "nodeType": "ExpressionStatement",
                        "src": "8695:41:158"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 69603,
                              "name": "user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 69482,
                              "src": "8764:4:158",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 69604,
                              "name": "caller",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 69484,
                              "src": "8770:6:158",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 69605,
                              "name": "callerAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 69514,
                              "src": "8778:12:158",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 69602,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27123,
                            "src": "8755:8:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 69606,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8755:36:158",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 69607,
                        "nodeType": "EmitStatement",
                        "src": "8750:41:158"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 69609,
                              "name": "caller",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 69484,
                              "src": "8815:6:158",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 69610,
                              "name": "callerAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 69514,
                              "src": "8823:12:158",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 69611,
                              "name": "index",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 69492,
                              "src": "8837:5:158",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 69608,
                            "name": "Mint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 47264,
                            "src": "8810:4:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256,uint256)"
                            }
                          },
                          "id": 69612,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8810:33:158",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 69613,
                        "nodeType": "EmitStatement",
                        "src": "8805:38:158"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 69621,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 69616,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 69486,
                      "src": "8868:5:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 69619,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8885:1:158",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 69618,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "8877:7:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 69617,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8877:7:158",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 69620,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8877:10:158",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "8868:19:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 69643,
                  "nodeType": "IfStatement",
                  "src": "8864:177:158",
                  "trueBody": {
                    "id": 69642,
                    "nodeType": "Block",
                    "src": "8889:152:158",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 69623,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 69486,
                              "src": "8909:5:158",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 69626,
                                  "name": "index",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 69492,
                                  "src": "8930:5:158",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 69624,
                                  "name": "amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 69488,
                                  "src": "8916:6:158",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 69625,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "8923:6:158",
                                "memberName": "rayDiv",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 64411,
                                "src": "8916:13:158",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 69627,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8916:20:158",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 69622,
                            "name": "_mint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              72226
                            ],
                            "referencedDeclaration": 72226,
                            "src": "8903:5:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 69628,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8903:34:158",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 69629,
                        "nodeType": "ExpressionStatement",
                        "src": "8903:34:158"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 69631,
                              "name": "user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 69482,
                              "src": "8965:4:158",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 69632,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 69486,
                              "src": "8971:5:158",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 69633,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 69488,
                              "src": "8978:6:158",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 69630,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27123,
                            "src": "8956:8:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 69634,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8956:29:158",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 69635,
                        "nodeType": "EmitStatement",
                        "src": "8951:34:158"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 69637,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 69486,
                              "src": "9009:5:158",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 69638,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 69488,
                              "src": "9016:6:158",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 69639,
                              "name": "index",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 69492,
                              "src": "9024:5:158",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 69636,
                            "name": "Mint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 47264,
                            "src": "9004:4:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256,uint256)"
                            }
                          },
                          "id": 69640,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9004:26:158",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 69641,
                        "nodeType": "EmitStatement",
                        "src": "8999:31:158"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 69480,
              "nodeType": "StructuredDocumentation",
              "src": "6882:275:158",
              "text": " @dev Mints fTokens to the reserve treasury\n - Internal function to include user variable\n @param user The user initiating the transfer\n @param amount The amount of tokens getting minted\n @param index The new liquidity index of the reserve"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_mintToStakeholders",
            "nameLocation": "7171:19:158",
            "parameters": {
              "id": 69493,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 69482,
                  "mutability": "mutable",
                  "name": "user",
                  "nameLocation": "7208:4:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 69645,
                  "src": "7200:12:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 69481,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7200:7:158",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 69484,
                  "mutability": "mutable",
                  "name": "caller",
                  "nameLocation": "7231:6:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 69645,
                  "src": "7223:14:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 69483,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7223:7:158",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 69486,
                  "mutability": "mutable",
                  "name": "owner",
                  "nameLocation": "7256:5:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 69645,
                  "src": "7248:13:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 69485,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7248:7:158",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 69488,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "7280:6:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 69645,
                  "src": "7272:14:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 69487,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7272:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 69490,
                  "mutability": "mutable",
                  "name": "liquidationFee",
                  "nameLocation": "7305:14:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 69645,
                  "src": "7297:22:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 69489,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7297:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 69492,
                  "mutability": "mutable",
                  "name": "index",
                  "nameLocation": "7338:5:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 69645,
                  "src": "7330:13:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 69491,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7330:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7190:159:158"
            },
            "returnParameters": {
              "id": 69494,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7373:0:158"
            },
            "scope": 70240,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 69680,
            "nodeType": "FunctionDefinition",
            "src": "13276:449:158",
            "nodes": [],
            "body": {
              "id": 69679,
              "nodeType": "Block",
              "src": "13386:339:158",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    69658
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 69658,
                      "mutability": "mutable",
                      "name": "pool",
                      "nameLocation": "13409:4:158",
                      "nodeType": "VariableDeclaration",
                      "scope": 69679,
                      "src": "13396:17:158",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ILendingPool_$48084",
                        "typeString": "contract ILendingPool"
                      },
                      "typeName": {
                        "id": 69657,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 69656,
                          "name": "ILendingPool",
                          "nameLocations": [
                            "13396:12:158"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 48084,
                          "src": "13396:12:158"
                        },
                        "referencedDeclaration": 48084,
                        "src": "13396:12:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$48084",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 69661,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 69659,
                      "name": "_getLendingPool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 70047,
                      "src": "13416:15:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$48084_$",
                        "typeString": "function () view returns (contract ILendingPool)"
                      }
                    },
                    "id": 69660,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13416:17:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPool_$48084",
                      "typeString": "contract ILendingPool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13396:37:158"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "id": 69671,
                                "name": "_underlyingCollateral",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 69164,
                                "src": "13559:21:158",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "id": 69672,
                                "name": "_underlyingAsset",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 69166,
                                "src": "13599:16:158",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "id": 69673,
                                "name": "_underlyingMaxTokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 69168,
                                "src": "13633:21:158",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 69674,
                                "name": "_underlyingMinTokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 69170,
                                "src": "13672:21:158",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "id": 69669,
                                "name": "pool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 69658,
                                "src": "13524:4:158",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ILendingPool_$48084",
                                  "typeString": "contract ILendingPool"
                                }
                              },
                              "id": 69670,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "13529:12:158",
                              "memberName": "getReserveId",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 48009,
                              "src": "13524:17:158",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (address,address,uint256,uint256) view external returns (uint256)"
                              }
                            },
                            "id": 69675,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "13524:183:158",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 69667,
                            "name": "pool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 69658,
                            "src": "13479:4:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ILendingPool_$48084",
                              "typeString": "contract ILendingPool"
                            }
                          },
                          "id": 69668,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "13484:26:158",
                          "memberName": "getReserveNormalizedIncome",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 47925,
                          "src": "13479:31:158",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256) view external returns (uint256)"
                          }
                        },
                        "id": 69676,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13479:238:158",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 69664,
                            "name": "user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 69648,
                            "src": "13466:4:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 69662,
                            "name": "super",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -25,
                            "src": "13450:5:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_super$_FToken_$70240_$",
                              "typeString": "type(contract super FToken)"
                            }
                          },
                          "id": 69663,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "13456:9:158",
                          "memberName": "balanceOf",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 26618,
                          "src": "13450:15:158",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view returns (uint256)"
                          }
                        },
                        "id": 69665,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13450:21:158",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 69666,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "13472:6:158",
                      "memberName": "rayMul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 64384,
                      "src": "13450:28:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 69677,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13450:268:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 69655,
                  "id": 69678,
                  "nodeType": "Return",
                  "src": "13443:275:158"
                }
              ]
            },
            "baseFunctions": [
              26618,
              27146
            ],
            "documentation": {
              "id": 69646,
              "nodeType": "StructuredDocumentation",
              "src": "13064:207:158",
              "text": " @dev Calculates the balance of the user: principal balance + interest generated by the principal\n @param user The user whose balance is calculated\n @return The balance of the user*"
            },
            "functionSelector": "70a08231",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "balanceOf",
            "nameLocation": "13285:9:158",
            "overrides": {
              "id": 69652,
              "nodeType": "OverrideSpecifier",
              "overrides": [
                {
                  "id": 69650,
                  "name": "ERC20Upgradeable",
                  "nameLocations": [
                    "13331:16:158"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 27111,
                  "src": "13331:16:158"
                },
                {
                  "id": 69651,
                  "name": "IERC20Upgradeable",
                  "nameLocations": [
                    "13349:17:158"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 27189,
                  "src": "13349:17:158"
                }
              ],
              "src": "13321:46:158"
            },
            "parameters": {
              "id": 69649,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 69648,
                  "mutability": "mutable",
                  "name": "user",
                  "nameLocation": "13303:4:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 69680,
                  "src": "13295:12:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 69647,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13295:7:158",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13294:14:158"
            },
            "returnParameters": {
              "id": 69655,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 69654,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 69680,
                  "src": "13377:7:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 69653,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13377:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13376:9:158"
            },
            "scope": 70240,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 69703,
            "nodeType": "FunctionDefinition",
            "src": "13734:382:158",
            "nodes": [],
            "body": {
              "id": 69702,
              "nodeType": "Block",
              "src": "13807:309:158",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    69687
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 69687,
                      "mutability": "mutable",
                      "name": "pool",
                      "nameLocation": "13830:4:158",
                      "nodeType": "VariableDeclaration",
                      "scope": 69702,
                      "src": "13817:17:158",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ILendingPool_$48084",
                        "typeString": "contract ILendingPool"
                      },
                      "typeName": {
                        "id": 69686,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 69685,
                          "name": "ILendingPool",
                          "nameLocations": [
                            "13817:12:158"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 48084,
                          "src": "13817:12:158"
                        },
                        "referencedDeclaration": 48084,
                        "src": "13817:12:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$48084",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 69690,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 69688,
                      "name": "_getLendingPool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 70047,
                      "src": "13837:15:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$48084_$",
                        "typeString": "function () view returns (contract ILendingPool)"
                      }
                    },
                    "id": 69689,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13837:17:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPool_$48084",
                      "typeString": "contract ILendingPool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13817:37:158"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 69695,
                            "name": "_underlyingCollateral",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 69164,
                            "src": "13951:21:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 69696,
                            "name": "_underlyingAsset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 69166,
                            "src": "13991:16:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 69697,
                            "name": "_underlyingMaxTokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 69168,
                            "src": "14025:21:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 69698,
                            "name": "_underlyingMinTokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 69170,
                            "src": "14064:21:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 69693,
                            "name": "pool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 69687,
                            "src": "13916:4:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ILendingPool_$48084",
                              "typeString": "contract ILendingPool"
                            }
                          },
                          "id": 69694,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "13921:12:158",
                          "memberName": "getReserveId",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 48009,
                          "src": "13916:17:158",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (address,address,uint256,uint256) view external returns (uint256)"
                          }
                        },
                        "id": 69699,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13916:183:158",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 69691,
                        "name": "pool",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69687,
                        "src": "13871:4:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$48084",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "id": 69692,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "13876:26:158",
                      "memberName": "getReserveNormalizedIncome",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 47925,
                      "src": "13871:31:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view external returns (uint256)"
                      }
                    },
                    "id": 69700,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13871:238:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 69684,
                  "id": 69701,
                  "nodeType": "Return",
                  "src": "13864:245:158"
                }
              ]
            },
            "baseFunctions": [
              47372
            ],
            "functionSelector": "36a72234",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getReserveNormalizationFactor",
            "nameLocation": "13743:29:158",
            "parameters": {
              "id": 69681,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13772:2:158"
            },
            "returnParameters": {
              "id": 69684,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 69683,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 69703,
                  "src": "13798:7:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 69682,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13798:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13797:9:158"
            },
            "scope": 70240,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 69718,
            "nodeType": "FunctionDefinition",
            "src": "14428:125:158",
            "nodes": [],
            "body": {
              "id": 69717,
              "nodeType": "Block",
              "src": "14508:45:158",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 69714,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69706,
                        "src": "14541:4:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 69712,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "14525:5:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_super$_FToken_$70240_$",
                          "typeString": "type(contract super FToken)"
                        }
                      },
                      "id": 69713,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "14531:9:158",
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 26618,
                      "src": "14525:15:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view returns (uint256)"
                      }
                    },
                    "id": 69715,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14525:21:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 69711,
                  "id": 69716,
                  "nodeType": "Return",
                  "src": "14518:28:158"
                }
              ]
            },
            "baseFunctions": [
              48542
            ],
            "documentation": {
              "id": 69704,
              "nodeType": "StructuredDocumentation",
              "src": "14122:301:158",
              "text": " @dev Returns the scaled balance of the user. The scaled balance is the sum of all the\n updated stored balance divided by the reserve's liquidity index at the moment of the update\n @param user The user whose balance is calculated\n @return The scaled balance of the user*"
            },
            "functionSelector": "1da24f3e",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "scaledBalanceOf",
            "nameLocation": "14437:15:158",
            "overrides": {
              "id": 69708,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "14481:8:158"
            },
            "parameters": {
              "id": 69707,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 69706,
                  "mutability": "mutable",
                  "name": "user",
                  "nameLocation": "14461:4:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 69718,
                  "src": "14453:12:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 69705,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14453:7:158",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14452:14:158"
            },
            "returnParameters": {
              "id": 69711,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 69710,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 69718,
                  "src": "14499:7:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 69709,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14499:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14498:9:158"
            },
            "scope": 70240,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 69739,
            "nodeType": "FunctionDefinition",
            "src": "14802:171:158",
            "nodes": [],
            "body": {
              "id": 69738,
              "nodeType": "Block",
              "src": "14905:68:158",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "components": [
                      {
                        "arguments": [
                          {
                            "id": 69731,
                            "name": "user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 69721,
                            "src": "14939:4:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 69729,
                            "name": "super",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -25,
                            "src": "14923:5:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_super$_FToken_$70240_$",
                              "typeString": "type(contract super FToken)"
                            }
                          },
                          "id": 69730,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "14929:9:158",
                          "memberName": "balanceOf",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 26618,
                          "src": "14923:15:158",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view returns (uint256)"
                          }
                        },
                        "id": 69732,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14923:21:158",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 69733,
                            "name": "super",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -25,
                            "src": "14946:5:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_super$_FToken_$70240_$",
                              "typeString": "type(contract super FToken)"
                            }
                          },
                          "id": 69734,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "14952:11:158",
                          "memberName": "totalSupply",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 26604,
                          "src": "14946:17:158",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 69735,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14946:19:158",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 69736,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "14922:44:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 69728,
                  "id": 69737,
                  "nodeType": "Return",
                  "src": "14915:51:158"
                }
              ]
            },
            "baseFunctions": [
              48552
            ],
            "documentation": {
              "id": 69719,
              "nodeType": "StructuredDocumentation",
              "src": "14559:238:158",
              "text": " @dev Returns the scaled balance of the user and the scaled total supply.\n @param user The address of the user\n @return The scaled balance of the user\n @return The scaled balance and the scaled total supply*"
            },
            "functionSelector": "0afbcdc9",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getScaledUserBalanceAndSupply",
            "nameLocation": "14811:29:158",
            "overrides": {
              "id": 69723,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "14869:8:158"
            },
            "parameters": {
              "id": 69722,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 69721,
                  "mutability": "mutable",
                  "name": "user",
                  "nameLocation": "14849:4:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 69739,
                  "src": "14841:12:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 69720,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14841:7:158",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14840:14:158"
            },
            "returnParameters": {
              "id": 69728,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 69725,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 69739,
                  "src": "14887:7:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 69724,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14887:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 69727,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 69739,
                  "src": "14896:7:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 69726,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14896:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14886:18:158"
            },
            "scope": 70240,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 69782,
            "nodeType": "FunctionDefinition",
            "src": "15204:579:158",
            "nodes": [],
            "body": {
              "id": 69781,
              "nodeType": "Block",
              "src": "15304:479:158",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    69750
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 69750,
                      "mutability": "mutable",
                      "name": "pool",
                      "nameLocation": "15327:4:158",
                      "nodeType": "VariableDeclaration",
                      "scope": 69781,
                      "src": "15314:17:158",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ILendingPool_$48084",
                        "typeString": "contract ILendingPool"
                      },
                      "typeName": {
                        "id": 69749,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 69748,
                          "name": "ILendingPool",
                          "nameLocations": [
                            "15314:12:158"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 48084,
                          "src": "15314:12:158"
                        },
                        "referencedDeclaration": 48084,
                        "src": "15314:12:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$48084",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 69753,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 69751,
                      "name": "_getLendingPool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 70047,
                      "src": "15334:15:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$48084_$",
                        "typeString": "function () view returns (contract ILendingPool)"
                      }
                    },
                    "id": 69752,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15334:17:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPool_$48084",
                      "typeString": "contract ILendingPool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15314:37:158"
                },
                {
                  "assignments": [
                    69755
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 69755,
                      "mutability": "mutable",
                      "name": "currentSupplyScaled",
                      "nameLocation": "15378:19:158",
                      "nodeType": "VariableDeclaration",
                      "scope": 69781,
                      "src": "15370:27:158",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 69754,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "15370:7:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 69759,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 69756,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "15400:5:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_super$_FToken_$70240_$",
                          "typeString": "type(contract super FToken)"
                        }
                      },
                      "id": 69757,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "15406:11:158",
                      "memberName": "totalSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 26604,
                      "src": "15400:17:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                        "typeString": "function () view returns (uint256)"
                      }
                    },
                    "id": 69758,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15400:19:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15370:49:158"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 69762,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 69760,
                      "name": "currentSupplyScaled",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 69755,
                      "src": "15434:19:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 69761,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "15457:1:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "15434:24:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 69766,
                  "nodeType": "IfStatement",
                  "src": "15430:63:158",
                  "trueBody": {
                    "id": 69765,
                    "nodeType": "Block",
                    "src": "15460:33:158",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30",
                          "id": 69763,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "15481:1:158",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 69747,
                        "id": 69764,
                        "nodeType": "Return",
                        "src": "15474:8:158"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "id": 69773,
                                "name": "_underlyingCollateral",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 69164,
                                "src": "15617:21:158",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "id": 69774,
                                "name": "_underlyingAsset",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 69166,
                                "src": "15657:16:158",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "id": 69775,
                                "name": "_underlyingMaxTokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 69168,
                                "src": "15691:21:158",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 69776,
                                "name": "_underlyingMinTokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 69170,
                                "src": "15730:21:158",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "id": 69771,
                                "name": "pool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 69750,
                                "src": "15582:4:158",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ILendingPool_$48084",
                                  "typeString": "contract ILendingPool"
                                }
                              },
                              "id": 69772,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "15587:12:158",
                              "memberName": "getReserveId",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 48009,
                              "src": "15582:17:158",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (address,address,uint256,uint256) view external returns (uint256)"
                              }
                            },
                            "id": 69777,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "15582:183:158",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 69769,
                            "name": "pool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 69750,
                            "src": "15537:4:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ILendingPool_$48084",
                              "typeString": "contract ILendingPool"
                            }
                          },
                          "id": 69770,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "15542:26:158",
                          "memberName": "getReserveNormalizedIncome",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 47925,
                          "src": "15537:31:158",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256) view external returns (uint256)"
                          }
                        },
                        "id": 69778,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15537:238:158",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 69767,
                        "name": "currentSupplyScaled",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69755,
                        "src": "15510:19:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 69768,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "15530:6:158",
                      "memberName": "rayMul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 64384,
                      "src": "15510:26:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 69779,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15510:266:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 69747,
                  "id": 69780,
                  "nodeType": "Return",
                  "src": "15503:273:158"
                }
              ]
            },
            "baseFunctions": [
              26604,
              27138
            ],
            "documentation": {
              "id": 69740,
              "nodeType": "StructuredDocumentation",
              "src": "14983:216:158",
              "text": " @dev Calculates the total supply of the specific fToken\n Since the balance of every single user increases over time, the total supply\n does that too.\n @return the current total supply*"
            },
            "functionSelector": "18160ddd",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "totalSupply",
            "nameLocation": "15213:11:158",
            "overrides": {
              "id": 69744,
              "nodeType": "OverrideSpecifier",
              "overrides": [
                {
                  "id": 69742,
                  "name": "ERC20Upgradeable",
                  "nameLocations": [
                    "15249:16:158"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 27111,
                  "src": "15249:16:158"
                },
                {
                  "id": 69743,
                  "name": "IERC20Upgradeable",
                  "nameLocations": [
                    "15267:17:158"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 27189,
                  "src": "15267:17:158"
                }
              ],
              "src": "15239:46:158"
            },
            "parameters": {
              "id": 69741,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15224:2:158"
            },
            "returnParameters": {
              "id": 69747,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 69746,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 69782,
                  "src": "15295:7:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 69745,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15295:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15294:9:158"
            },
            "scope": 70240,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 69794,
            "nodeType": "FunctionDefinition",
            "src": "15941:119:158",
            "nodes": [],
            "body": {
              "id": 69793,
              "nodeType": "Block",
              "src": "16017:43:158",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 69789,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "16034:5:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_super$_FToken_$70240_$",
                          "typeString": "type(contract super FToken)"
                        }
                      },
                      "id": 69790,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "16040:11:158",
                      "memberName": "totalSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 26604,
                      "src": "16034:17:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                        "typeString": "function () view returns (uint256)"
                      }
                    },
                    "id": 69791,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16034:19:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 69788,
                  "id": 69792,
                  "nodeType": "Return",
                  "src": "16027:26:158"
                }
              ]
            },
            "baseFunctions": [
              48558
            ],
            "documentation": {
              "id": 69783,
              "nodeType": "StructuredDocumentation",
              "src": "15789:147:158",
              "text": " @dev Returns the scaled total supply of the variable debt token. Represents sum(debt/index)\n @return the scaled total supply*"
            },
            "functionSelector": "b1bf962d",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "scaledTotalSupply",
            "nameLocation": "15950:17:158",
            "overrides": {
              "id": 69785,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "15990:8:158"
            },
            "parameters": {
              "id": 69784,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15967:2:158"
            },
            "returnParameters": {
              "id": 69788,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 69787,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 69794,
                  "src": "16008:7:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 69786,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16008:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16007:9:158"
            },
            "scope": 70240,
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "id": 69827,
            "nodeType": "FunctionDefinition",
            "src": "16176:410:158",
            "nodes": [],
            "body": {
              "id": 69826,
              "nodeType": "Block",
              "src": "16247:339:158",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    69803
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 69803,
                      "mutability": "mutable",
                      "name": "pool",
                      "nameLocation": "16270:4:158",
                      "nodeType": "VariableDeclaration",
                      "scope": 69826,
                      "src": "16257:17:158",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ILendingPool_$48084",
                        "typeString": "contract ILendingPool"
                      },
                      "typeName": {
                        "id": 69802,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 69801,
                          "name": "ILendingPool",
                          "nameLocations": [
                            "16257:12:158"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 48084,
                          "src": "16257:12:158"
                        },
                        "referencedDeclaration": 48084,
                        "src": "16257:12:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$48084",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 69806,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 69804,
                      "name": "_getLendingPool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 70047,
                      "src": "16277:15:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$48084_$",
                        "typeString": "function () view returns (contract ILendingPool)"
                      }
                    },
                    "id": 69805,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16277:17:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPool_$48084",
                      "typeString": "contract ILendingPool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16257:37:158"
                },
                {
                  "assignments": [
                    69808
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 69808,
                      "mutability": "mutable",
                      "name": "reserveId",
                      "nameLocation": "16313:9:158",
                      "nodeType": "VariableDeclaration",
                      "scope": 69826,
                      "src": "16305:17:158",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 69807,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "16305:7:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 69816,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 69811,
                        "name": "_underlyingCollateral",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69164,
                        "src": "16356:21:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 69812,
                        "name": "_underlyingAsset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69166,
                        "src": "16392:16:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 69813,
                        "name": "_underlyingMaxTokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69168,
                        "src": "16422:21:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 69814,
                        "name": "_underlyingMinTokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69170,
                        "src": "16457:21:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 69809,
                        "name": "pool",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69803,
                        "src": "16325:4:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$48084",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "id": 69810,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "16330:12:158",
                      "memberName": "getReserveId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 48009,
                      "src": "16325:17:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,address,uint256,uint256) view external returns (uint256)"
                      }
                    },
                    "id": 69815,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16325:163:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16305:183:158"
                },
                {
                  "assignments": [
                    69818
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 69818,
                      "mutability": "mutable",
                      "name": "index",
                      "nameLocation": "16507:5:158",
                      "nodeType": "VariableDeclaration",
                      "scope": 69826,
                      "src": "16499:13:158",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 69817,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "16499:7:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 69823,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 69821,
                        "name": "reserveId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69808,
                        "src": "16547:9:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 69819,
                        "name": "pool",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69803,
                        "src": "16515:4:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$48084",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "id": 69820,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "16520:26:158",
                      "memberName": "getReserveNormalizedIncome",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 47925,
                      "src": "16515:31:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view external returns (uint256)"
                      }
                    },
                    "id": 69822,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16515:42:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16499:58:158"
                },
                {
                  "expression": {
                    "id": 69824,
                    "name": "index",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 69818,
                    "src": "16574:5:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 69800,
                  "id": 69825,
                  "nodeType": "Return",
                  "src": "16567:12:158"
                }
              ]
            },
            "baseFunctions": [
              47383
            ],
            "documentation": {
              "id": 69795,
              "nodeType": "StructuredDocumentation",
              "src": "16066:105:158",
              "text": " @dev Returns the fTOKEN : underlyingASSET exchange rate\n @return the exchange rate*"
            },
            "functionSelector": "3ba0b9a9",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "exchangeRate",
            "nameLocation": "16185:12:158",
            "overrides": {
              "id": 69797,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "16220:8:158"
            },
            "parameters": {
              "id": 69796,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16197:2:158"
            },
            "returnParameters": {
              "id": 69800,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 69799,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 69827,
                  "src": "16238:7:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 69798,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16238:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16237:9:158"
            },
            "scope": 70240,
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "id": 69839,
            "nodeType": "FunctionDefinition",
            "src": "16592:111:158",
            "nodes": [],
            "body": {
              "id": 69838,
              "nodeType": "Block",
              "src": "16668:35:158",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 69836,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 69834,
                      "name": "_creator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 69160,
                      "src": "16678:8:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 69835,
                      "name": "creator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 69829,
                      "src": "16689:7:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "16678:18:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 69837,
                  "nodeType": "ExpressionStatement",
                  "src": "16678:18:158"
                }
              ]
            },
            "baseFunctions": [
              47388
            ],
            "functionSelector": "bc1d19dd",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 69832,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 69831,
                  "name": "onlyLendingPool",
                  "nameLocations": [
                    "16652:15:158"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 69193,
                  "src": "16652:15:158"
                },
                "nodeType": "ModifierInvocation",
                "src": "16652:15:158"
              }
            ],
            "name": "setReserveCreatorAddress",
            "nameLocation": "16601:24:158",
            "parameters": {
              "id": 69830,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 69829,
                  "mutability": "mutable",
                  "name": "creator",
                  "nameLocation": "16634:7:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 69839,
                  "src": "16626:15:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 69828,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16626:7:158",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16625:17:158"
            },
            "returnParameters": {
              "id": 69833,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16668:0:158"
            },
            "scope": 70240,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 69847,
            "nodeType": "FunctionDefinition",
            "src": "16709:98:158",
            "nodes": [],
            "body": {
              "id": 69846,
              "nodeType": "Block",
              "src": "16775:32:158",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 69844,
                    "name": "_creator",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 69160,
                    "src": "16792:8:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 69843,
                  "id": 69845,
                  "nodeType": "Return",
                  "src": "16785:15:158"
                }
              ]
            },
            "baseFunctions": [
              47393
            ],
            "functionSelector": "47bec6f0",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getReserveCreatorAddress",
            "nameLocation": "16718:24:158",
            "parameters": {
              "id": 69840,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16742:2:158"
            },
            "returnParameters": {
              "id": 69843,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 69842,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 69847,
                  "src": "16766:7:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 69841,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16766:7:158",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16765:9:158"
            },
            "scope": 70240,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 69859,
            "nodeType": "FunctionDefinition",
            "src": "16813:144:158",
            "nodes": [],
            "body": {
              "id": 69858,
              "nodeType": "Block",
              "src": "16902:55:158",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 69856,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 69854,
                      "name": "_creatorPercentage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 69172,
                      "src": "16912:18:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 69855,
                      "name": "creatorPercentage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 69849,
                      "src": "16933:17:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "16912:38:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 69857,
                  "nodeType": "ExpressionStatement",
                  "src": "16912:38:158"
                }
              ]
            },
            "baseFunctions": [
              47398
            ],
            "functionSelector": "acac18e4",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 69852,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 69851,
                  "name": "onlyLendingPool",
                  "nameLocations": [
                    "16886:15:158"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 69193,
                  "src": "16886:15:158"
                },
                "nodeType": "ModifierInvocation",
                "src": "16886:15:158"
              }
            ],
            "name": "setReserveCreatorPercentage",
            "nameLocation": "16822:27:158",
            "parameters": {
              "id": 69850,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 69849,
                  "mutability": "mutable",
                  "name": "creatorPercentage",
                  "nameLocation": "16858:17:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 69859,
                  "src": "16850:25:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 69848,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16850:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16849:27:158"
            },
            "returnParameters": {
              "id": 69853,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16902:0:158"
            },
            "scope": 70240,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 69867,
            "nodeType": "FunctionDefinition",
            "src": "16963:111:158",
            "nodes": [],
            "body": {
              "id": 69866,
              "nodeType": "Block",
              "src": "17032:42:158",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 69864,
                    "name": "_creatorPercentage",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 69172,
                    "src": "17049:18:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 69863,
                  "id": 69865,
                  "nodeType": "Return",
                  "src": "17042:25:158"
                }
              ]
            },
            "baseFunctions": [
              47403
            ],
            "functionSelector": "2d6aa128",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getReserveCreatorPercentage",
            "nameLocation": "16972:27:158",
            "parameters": {
              "id": 69860,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16999:2:158"
            },
            "returnParameters": {
              "id": 69863,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 69862,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 69867,
                  "src": "17023:7:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 69861,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17023:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17022:9:158"
            },
            "scope": 70240,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 69879,
            "nodeType": "FunctionDefinition",
            "src": "17080:161:158",
            "nodes": [],
            "body": {
              "id": 69878,
              "nodeType": "Block",
              "src": "17174:67:158",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 69876,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 69874,
                      "name": "_auctionCallerPercentage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 69174,
                      "src": "17184:24:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 69875,
                      "name": "auctionCallerPercentage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 69869,
                      "src": "17211:23:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17184:50:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 69877,
                  "nodeType": "ExpressionStatement",
                  "src": "17184:50:158"
                }
              ]
            },
            "baseFunctions": [
              47408
            ],
            "functionSelector": "7ccd3b46",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 69872,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 69871,
                  "name": "onlyLendingPool",
                  "nameLocations": [
                    "17158:15:158"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 69193,
                  "src": "17158:15:158"
                },
                "nodeType": "ModifierInvocation",
                "src": "17158:15:158"
              }
            ],
            "name": "setAuctionCallerPercentage",
            "nameLocation": "17089:26:158",
            "parameters": {
              "id": 69870,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 69869,
                  "mutability": "mutable",
                  "name": "auctionCallerPercentage",
                  "nameLocation": "17124:23:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 69879,
                  "src": "17116:31:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 69868,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17116:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17115:33:158"
            },
            "returnParameters": {
              "id": 69873,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17174:0:158"
            },
            "scope": 70240,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 69887,
            "nodeType": "FunctionDefinition",
            "src": "17247:118:158",
            "nodes": [],
            "body": {
              "id": 69886,
              "nodeType": "Block",
              "src": "17317:48:158",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 69884,
                    "name": "_auctionCallerPercentage",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 69174,
                    "src": "17334:24:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 69883,
                  "id": 69885,
                  "nodeType": "Return",
                  "src": "17327:31:158"
                }
              ]
            },
            "baseFunctions": [
              47413
            ],
            "functionSelector": "f9e2bf6b",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getAuctionCallerPercentage",
            "nameLocation": "17256:26:158",
            "parameters": {
              "id": 69880,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17282:2:158"
            },
            "returnParameters": {
              "id": 69883,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 69882,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 69887,
                  "src": "17308:7:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 69881,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17308:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17307:9:158"
            },
            "scope": 70240,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 69899,
            "nodeType": "FunctionDefinition",
            "src": "17371:165:158",
            "nodes": [],
            "body": {
              "id": 69898,
              "nodeType": "Block",
              "src": "17467:69:158",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 69896,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 69894,
                      "name": "_auctionCreatorPercentage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 69176,
                      "src": "17477:25:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 69895,
                      "name": "auctionCreatorPercentage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 69889,
                      "src": "17505:24:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17477:52:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 69897,
                  "nodeType": "ExpressionStatement",
                  "src": "17477:52:158"
                }
              ]
            },
            "baseFunctions": [
              47418
            ],
            "functionSelector": "6b8465f8",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 69892,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 69891,
                  "name": "onlyLendingPool",
                  "nameLocations": [
                    "17451:15:158"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 69193,
                  "src": "17451:15:158"
                },
                "nodeType": "ModifierInvocation",
                "src": "17451:15:158"
              }
            ],
            "name": "setAuctionCreatorPercentage",
            "nameLocation": "17380:27:158",
            "parameters": {
              "id": 69890,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 69889,
                  "mutability": "mutable",
                  "name": "auctionCreatorPercentage",
                  "nameLocation": "17416:24:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 69899,
                  "src": "17408:32:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 69888,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17408:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17407:34:158"
            },
            "returnParameters": {
              "id": 69893,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17467:0:158"
            },
            "scope": 70240,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 69907,
            "nodeType": "FunctionDefinition",
            "src": "17542:120:158",
            "nodes": [],
            "body": {
              "id": 69906,
              "nodeType": "Block",
              "src": "17613:49:158",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 69904,
                    "name": "_auctionCreatorPercentage",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 69176,
                    "src": "17630:25:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 69903,
                  "id": 69905,
                  "nodeType": "Return",
                  "src": "17623:32:158"
                }
              ]
            },
            "baseFunctions": [
              47423
            ],
            "functionSelector": "14ff75c9",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getAuctionCreatorPercentage",
            "nameLocation": "17551:27:158",
            "parameters": {
              "id": 69900,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17578:2:158"
            },
            "returnParameters": {
              "id": 69903,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 69902,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 69907,
                  "src": "17604:7:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 69901,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17604:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17603:9:158"
            },
            "scope": 70240,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 69916,
            "nodeType": "FunctionDefinition",
            "src": "17775:99:158",
            "nodes": [],
            "body": {
              "id": 69915,
              "nodeType": "Block",
              "src": "17841:33:158",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 69913,
                    "name": "_treasury",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 69162,
                    "src": "17858:9:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 69912,
                  "id": 69914,
                  "nodeType": "Return",
                  "src": "17851:16:158"
                }
              ]
            },
            "baseFunctions": [
              47428
            ],
            "documentation": {
              "id": 69908,
              "nodeType": "StructuredDocumentation",
              "src": "17668:102:158",
              "text": " @dev Returns the address of the FluidNFT treasury, receiving the fees on this fToken*"
            },
            "functionSelector": "ae167335",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "RESERVE_TREASURY_ADDRESS",
            "nameLocation": "17784:24:158",
            "parameters": {
              "id": 69909,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17808:2:158"
            },
            "returnParameters": {
              "id": 69912,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 69911,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 69916,
                  "src": "17832:7:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 69910,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17832:7:158",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17831:9:158"
            },
            "scope": 70240,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 69925,
            "nodeType": "FunctionDefinition",
            "src": "17970:112:158",
            "nodes": [],
            "body": {
              "id": 69924,
              "nodeType": "Block",
              "src": "18041:41:158",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 69922,
                    "name": "_underlyingCollateral",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 69164,
                    "src": "18054:21:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 69921,
                  "id": 69923,
                  "nodeType": "Return",
                  "src": "18047:28:158"
                }
              ]
            },
            "baseFunctions": [
              47433
            ],
            "documentation": {
              "id": 69917,
              "nodeType": "StructuredDocumentation",
              "src": "17880:85:158",
              "text": " @dev Returns the address of the underlyingCollateral of this fToken*"
            },
            "functionSelector": "57f1b837",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "UNDERLYING_COLLATERAL_ADDRESS",
            "nameLocation": "17979:29:158",
            "parameters": {
              "id": 69918,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "18008:2:158"
            },
            "returnParameters": {
              "id": 69921,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 69920,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 69925,
                  "src": "18032:7:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 69919,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18032:7:158",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18031:9:158"
            },
            "scope": 70240,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 69935,
            "nodeType": "FunctionDefinition",
            "src": "18173:111:158",
            "nodes": [],
            "body": {
              "id": 69934,
              "nodeType": "Block",
              "src": "18248:36:158",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 69932,
                    "name": "_underlyingAsset",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 69166,
                    "src": "18261:16:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 69931,
                  "id": 69933,
                  "nodeType": "Return",
                  "src": "18254:23:158"
                }
              ]
            },
            "baseFunctions": [
              47438
            ],
            "documentation": {
              "id": 69926,
              "nodeType": "StructuredDocumentation",
              "src": "18088:80:158",
              "text": " @dev Returns the address of the underlyingAsset of this fToken*"
            },
            "functionSelector": "b16a19de",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "UNDERLYING_ASSET_ADDRESS",
            "nameLocation": "18182:24:158",
            "overrides": {
              "id": 69928,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "18221:8:158"
            },
            "parameters": {
              "id": 69927,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "18206:2:158"
            },
            "returnParameters": {
              "id": 69931,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 69930,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 69935,
                  "src": "18239:7:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 69929,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18239:7:158",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18238:9:158"
            },
            "scope": 70240,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 69945,
            "nodeType": "FunctionDefinition",
            "src": "18380:115:158",
            "nodes": [],
            "body": {
              "id": 69944,
              "nodeType": "Block",
              "src": "18454:41:158",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 69942,
                    "name": "_underlyingMaxTokenId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 69168,
                    "src": "18467:21:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 69941,
                  "id": 69943,
                  "nodeType": "Return",
                  "src": "18460:28:158"
                }
              ]
            },
            "baseFunctions": [
              47443
            ],
            "documentation": {
              "id": 69936,
              "nodeType": "StructuredDocumentation",
              "src": "18290:85:158",
              "text": " @dev Returns the tokenId of the underlyingMaxTokenId of this fToken*"
            },
            "functionSelector": "04601608",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "UNDERLYING_MAX_TOKEN_ID",
            "nameLocation": "18389:23:158",
            "overrides": {
              "id": 69938,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "18427:8:158"
            },
            "parameters": {
              "id": 69937,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "18412:2:158"
            },
            "returnParameters": {
              "id": 69941,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 69940,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 69945,
                  "src": "18445:7:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 69939,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18445:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18444:9:158"
            },
            "scope": 70240,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 69955,
            "nodeType": "FunctionDefinition",
            "src": "18591:115:158",
            "nodes": [],
            "body": {
              "id": 69954,
              "nodeType": "Block",
              "src": "18665:41:158",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 69952,
                    "name": "_underlyingMinTokenId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 69170,
                    "src": "18678:21:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 69951,
                  "id": 69953,
                  "nodeType": "Return",
                  "src": "18671:28:158"
                }
              ]
            },
            "baseFunctions": [
              47448
            ],
            "documentation": {
              "id": 69946,
              "nodeType": "StructuredDocumentation",
              "src": "18501:85:158",
              "text": " @dev Returns the tokenId of the underlyingMinTokenId of this fToken*"
            },
            "functionSelector": "c35be017",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "UNDERLYING_MIN_TOKEN_ID",
            "nameLocation": "18600:23:158",
            "overrides": {
              "id": 69948,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "18638:8:158"
            },
            "parameters": {
              "id": 69947,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "18623:2:158"
            },
            "returnParameters": {
              "id": 69951,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 69950,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 69955,
                  "src": "18656:7:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 69949,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18656:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18655:9:158"
            },
            "scope": 70240,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 69966,
            "nodeType": "FunctionDefinition",
            "src": "18790:92:158",
            "nodes": [],
            "body": {
              "id": 69965,
              "nodeType": "Block",
              "src": "18841:41:158",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 69962,
                      "name": "_getLendingPool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 70047,
                      "src": "18858:15:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$48084_$",
                        "typeString": "function () view returns (contract ILendingPool)"
                      }
                    },
                    "id": 69963,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18858:17:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPool_$48084",
                      "typeString": "contract ILendingPool"
                    }
                  },
                  "functionReturnParameters": 69961,
                  "id": 69964,
                  "nodeType": "Return",
                  "src": "18851:24:158"
                }
              ]
            },
            "documentation": {
              "id": 69956,
              "nodeType": "StructuredDocumentation",
              "src": "18712:73:158",
              "text": " @dev Returns the lending pool where this fToken is used*"
            },
            "functionSelector": "7535d246",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "POOL",
            "nameLocation": "18799:4:158",
            "parameters": {
              "id": 69957,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "18803:2:158"
            },
            "returnParameters": {
              "id": 69961,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 69960,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 69966,
                  "src": "18827:12:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ILendingPool_$48084",
                    "typeString": "contract ILendingPool"
                  },
                  "typeName": {
                    "id": 69959,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 69958,
                      "name": "ILendingPool",
                      "nameLocations": [
                        "18827:12:158"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 48084,
                      "src": "18827:12:158"
                    },
                    "referencedDeclaration": 48084,
                    "src": "18827:12:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPool_$48084",
                      "typeString": "contract ILendingPool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18826:14:158"
            },
            "scope": 70240,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 69981,
            "nodeType": "FunctionDefinition",
            "src": "18988:197:158",
            "nodes": [],
            "body": {
              "id": 69980,
              "nodeType": "Block",
              "src": "19087:98:158",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 69975,
                            "name": "_addressProvider",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 69158,
                            "src": "19130:16:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAddressProvider_$46447",
                              "typeString": "contract IAddressProvider"
                            }
                          },
                          "id": 69976,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "19147:27:158",
                          "memberName": "getPoolIncentivesController",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 46361,
                          "src": "19130:44:158",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                            "typeString": "function () view external returns (address)"
                          }
                        },
                        "id": 69977,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "19130:46:158",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 69974,
                      "name": "IPoolIncentivesController",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 48421,
                      "src": "19104:25:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IPoolIncentivesController_$48421_$",
                        "typeString": "type(contract IPoolIncentivesController)"
                      }
                    },
                    "id": 69978,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19104:73:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPoolIncentivesController_$48421",
                      "typeString": "contract IPoolIncentivesController"
                    }
                  },
                  "functionReturnParameters": 69973,
                  "id": 69979,
                  "nodeType": "Return",
                  "src": "19097:80:158"
                }
              ]
            },
            "baseFunctions": [
              72100
            ],
            "documentation": {
              "id": 69967,
              "nodeType": "StructuredDocumentation",
              "src": "18888:95:158",
              "text": " @dev For internal usage in the logic of the parent contract IncentivizedERC20*"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getPoolIncentivesController",
            "nameLocation": "18997:28:158",
            "overrides": {
              "id": 69969,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "19042:8:158"
            },
            "parameters": {
              "id": 69968,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19025:2:158"
            },
            "returnParameters": {
              "id": 69973,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 69972,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 69981,
                  "src": "19060:25:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IPoolIncentivesController_$48421",
                    "typeString": "contract IPoolIncentivesController"
                  },
                  "typeName": {
                    "id": 69971,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 69970,
                      "name": "IPoolIncentivesController",
                      "nameLocations": [
                        "19060:25:158"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 48421,
                      "src": "19060:25:158"
                    },
                    "referencedDeclaration": 48421,
                    "src": "19060:25:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPoolIncentivesController_$48421",
                      "typeString": "contract IPoolIncentivesController"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "19059:27:158"
            },
            "scope": 70240,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 69989,
            "nodeType": "FunctionDefinition",
            "src": "19191:120:158",
            "nodes": [],
            "body": {
              "id": 69988,
              "nodeType": "Block",
              "src": "19266:45:158",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 69986,
                    "name": "_underlyingCollateral",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 69164,
                    "src": "19283:21:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 69985,
                  "id": 69987,
                  "nodeType": "Return",
                  "src": "19276:28:158"
                }
              ]
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getUnderlyingCollateralAddress",
            "nameLocation": "19200:31:158",
            "parameters": {
              "id": 69982,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19231:2:158"
            },
            "returnParameters": {
              "id": 69985,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 69984,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 69989,
                  "src": "19257:7:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 69983,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19257:7:158",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "19256:9:158"
            },
            "scope": 70240,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 69998,
            "nodeType": "FunctionDefinition",
            "src": "19319:119:158",
            "nodes": [],
            "body": {
              "id": 69997,
              "nodeType": "Block",
              "src": "19398:40:158",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 69995,
                    "name": "_underlyingAsset",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 69166,
                    "src": "19415:16:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 69994,
                  "id": 69996,
                  "nodeType": "Return",
                  "src": "19408:23:158"
                }
              ]
            },
            "baseFunctions": [
              72105
            ],
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getUnderlyingAssetAddress",
            "nameLocation": "19328:26:158",
            "overrides": {
              "id": 69991,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "19371:8:158"
            },
            "parameters": {
              "id": 69990,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19354:2:158"
            },
            "returnParameters": {
              "id": 69994,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 69993,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 69998,
                  "src": "19389:7:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 69992,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19389:7:158",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "19388:9:158"
            },
            "scope": 70240,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 70010,
            "nodeType": "FunctionDefinition",
            "src": "19531:152:158",
            "nodes": [],
            "body": {
              "id": 70009,
              "nodeType": "Block",
              "src": "19629:54:158",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 70006,
                      "name": "_getPoolIncentivesController",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        69981
                      ],
                      "referencedDeclaration": 69981,
                      "src": "19646:28:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IPoolIncentivesController_$48421_$",
                        "typeString": "function () view returns (contract IPoolIncentivesController)"
                      }
                    },
                    "id": 70007,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19646:30:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPoolIncentivesController_$48421",
                      "typeString": "contract IPoolIncentivesController"
                    }
                  },
                  "functionReturnParameters": 70005,
                  "id": 70008,
                  "nodeType": "Return",
                  "src": "19639:37:158"
                }
              ]
            },
            "baseFunctions": [
              47378
            ],
            "documentation": {
              "id": 69999,
              "nodeType": "StructuredDocumentation",
              "src": "19446:80:158",
              "text": " @dev Returns the address of the incentives controller contract*"
            },
            "functionSelector": "19ef9268",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getPoolIncentivesController",
            "nameLocation": "19540:27:158",
            "overrides": {
              "id": 70001,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "19584:8:158"
            },
            "parameters": {
              "id": 70000,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19567:2:158"
            },
            "returnParameters": {
              "id": 70005,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 70004,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 70010,
                  "src": "19602:25:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IPoolIncentivesController_$48421",
                    "typeString": "contract IPoolIncentivesController"
                  },
                  "typeName": {
                    "id": 70003,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 70002,
                      "name": "IPoolIncentivesController",
                      "nameLocations": [
                        "19602:25:158"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 48421,
                      "src": "19602:25:158"
                    },
                    "referencedDeclaration": 48421,
                    "src": "19602:25:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPoolIncentivesController_$48421",
                      "typeString": "contract IPoolIncentivesController"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "19601:27:158"
            },
            "scope": 70240,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 70034,
            "nodeType": "FunctionDefinition",
            "src": "19986:259:158",
            "nodes": [],
            "body": {
              "id": 70033,
              "nodeType": "Block",
              "src": "20141:104:158",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 70027,
                        "name": "target",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70013,
                        "src": "20200:6:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 70028,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70015,
                        "src": "20208:6:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 70024,
                            "name": "_underlyingAsset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 69166,
                            "src": "20169:16:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 70023,
                          "name": "IERC20Upgradeable",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27189,
                          "src": "20151:17:158",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC20Upgradeable_$27189_$",
                            "typeString": "type(contract IERC20Upgradeable)"
                          }
                        },
                        "id": 70025,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "20151:35:158",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Upgradeable_$27189",
                          "typeString": "contract IERC20Upgradeable"
                        }
                      },
                      "id": 70026,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "20187:12:158",
                      "memberName": "safeTransfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27282,
                      "src": "20151:48:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20Upgradeable_$27189_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20Upgradeable_$27189_$",
                        "typeString": "function (contract IERC20Upgradeable,address,uint256)"
                      }
                    },
                    "id": 70029,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20151:64:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 70030,
                  "nodeType": "ExpressionStatement",
                  "src": "20151:64:158"
                },
                {
                  "expression": {
                    "id": 70031,
                    "name": "amount",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 70015,
                    "src": "20232:6:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 70022,
                  "id": 70032,
                  "nodeType": "Return",
                  "src": "20225:13:158"
                }
              ]
            },
            "baseFunctions": [
              47367
            ],
            "documentation": {
              "id": 70011,
              "nodeType": "StructuredDocumentation",
              "src": "19689:292:158",
              "text": " @dev Transfers the underlying asset to `target`. Used by the LendingPool to transfer\n assets in borrow(), withdraw() and flashLoan()\n @param target The recipient of the fTokens\n @param amount The amount getting transferred\n @return The amount transferred*"
            },
            "functionSelector": "4efecaa5",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 70019,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 70018,
                  "name": "onlyLendingPool",
                  "nameLocations": [
                    "20093:15:158"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 69193,
                  "src": "20093:15:158"
                },
                "nodeType": "ModifierInvocation",
                "src": "20093:15:158"
              }
            ],
            "name": "transferUnderlyingTo",
            "nameLocation": "19995:20:158",
            "overrides": {
              "id": 70017,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "20075:8:158"
            },
            "parameters": {
              "id": 70016,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 70013,
                  "mutability": "mutable",
                  "name": "target",
                  "nameLocation": "20024:6:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 70034,
                  "src": "20016:14:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 70012,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20016:7:158",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 70015,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "20040:6:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 70034,
                  "src": "20032:14:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 70014,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20032:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20015:32:158"
            },
            "returnParameters": {
              "id": 70022,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 70021,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 70034,
                  "src": "20127:7:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 70020,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20127:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20126:9:158"
            },
            "scope": 70240,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 70047,
            "nodeType": "FunctionDefinition",
            "src": "20251:135:158",
            "nodes": [],
            "body": {
              "id": 70046,
              "nodeType": "Block",
              "src": "20315:71:158",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 70041,
                            "name": "_addressProvider",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 69158,
                            "src": "20345:16:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAddressProvider_$46447",
                              "typeString": "contract IAddressProvider"
                            }
                          },
                          "id": 70042,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "20362:14:158",
                          "memberName": "getLendingPool",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 46256,
                          "src": "20345:31:158",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                            "typeString": "function () view external returns (address)"
                          }
                        },
                        "id": 70043,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "20345:33:158",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 70040,
                      "name": "ILendingPool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 48084,
                      "src": "20332:12:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_ILendingPool_$48084_$",
                        "typeString": "type(contract ILendingPool)"
                      }
                    },
                    "id": 70044,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20332:47:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPool_$48084",
                      "typeString": "contract ILendingPool"
                    }
                  },
                  "functionReturnParameters": 70039,
                  "id": 70045,
                  "nodeType": "Return",
                  "src": "20325:54:158"
                }
              ]
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getLendingPool",
            "nameLocation": "20260:15:158",
            "parameters": {
              "id": 70035,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "20275:2:158"
            },
            "returnParameters": {
              "id": 70039,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 70038,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 70047,
                  "src": "20301:12:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ILendingPool_$48084",
                    "typeString": "contract ILendingPool"
                  },
                  "typeName": {
                    "id": 70037,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 70036,
                      "name": "ILendingPool",
                      "nameLocations": [
                        "20301:12:158"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 48084,
                      "src": "20301:12:158"
                    },
                    "referencedDeclaration": 48084,
                    "src": "20301:12:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPool_$48084",
                      "typeString": "contract ILendingPool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20300:14:158"
            },
            "scope": 70240,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 70060,
            "nodeType": "FunctionDefinition",
            "src": "20392:139:158",
            "nodes": [],
            "body": {
              "id": 70059,
              "nodeType": "Block",
              "src": "20458:73:158",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 70054,
                            "name": "_addressProvider",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 69158,
                            "src": "20489:16:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAddressProvider_$46447",
                              "typeString": "contract IAddressProvider"
                            }
                          },
                          "id": 70055,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "20506:15:158",
                          "memberName": "getConfigurator",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 46266,
                          "src": "20489:32:158",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                            "typeString": "function () view external returns (address)"
                          }
                        },
                        "id": 70056,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "20489:34:158",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 70053,
                      "name": "IConfigurator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 47089,
                      "src": "20475:13:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IConfigurator_$47089_$",
                        "typeString": "type(contract IConfigurator)"
                      }
                    },
                    "id": 70057,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20475:49:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IConfigurator_$47089",
                      "typeString": "contract IConfigurator"
                    }
                  },
                  "functionReturnParameters": 70052,
                  "id": 70058,
                  "nodeType": "Return",
                  "src": "20468:56:158"
                }
              ]
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getConfigurator",
            "nameLocation": "20401:16:158",
            "parameters": {
              "id": 70048,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "20417:2:158"
            },
            "returnParameters": {
              "id": 70052,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 70051,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 70060,
                  "src": "20443:13:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IConfigurator_$47089",
                    "typeString": "contract IConfigurator"
                  },
                  "typeName": {
                    "id": 70050,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 70049,
                      "name": "IConfigurator",
                      "nameLocations": [
                        "20443:13:158"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 47089,
                      "src": "20443:13:158"
                    },
                    "referencedDeclaration": 47089,
                    "src": "20443:13:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IConfigurator_$47089",
                      "typeString": "contract IConfigurator"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20442:15:158"
            },
            "scope": 70240,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 70148,
            "nodeType": "FunctionDefinition",
            "src": "20885:962:158",
            "nodes": [],
            "body": {
              "id": 70147,
              "nodeType": "Block",
              "src": "21008:839:158",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    70074
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 70074,
                      "mutability": "mutable",
                      "name": "pool",
                      "nameLocation": "21031:4:158",
                      "nodeType": "VariableDeclaration",
                      "scope": 70147,
                      "src": "21018:17:158",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ILendingPool_$48084",
                        "typeString": "contract ILendingPool"
                      },
                      "typeName": {
                        "id": 70073,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 70072,
                          "name": "ILendingPool",
                          "nameLocations": [
                            "21018:12:158"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 48084,
                          "src": "21018:12:158"
                        },
                        "referencedDeclaration": 48084,
                        "src": "21018:12:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$48084",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 70077,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 70075,
                      "name": "_getLendingPool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 70047,
                      "src": "21038:15:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$48084_$",
                        "typeString": "function () view returns (contract ILendingPool)"
                      }
                    },
                    "id": 70076,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21038:17:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPool_$48084",
                      "typeString": "contract ILendingPool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21018:37:158"
                },
                {
                  "assignments": [
                    70079
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 70079,
                      "mutability": "mutable",
                      "name": "reserveId",
                      "nameLocation": "21074:9:158",
                      "nodeType": "VariableDeclaration",
                      "scope": 70147,
                      "src": "21066:17:158",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 70078,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "21066:7:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 70087,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 70082,
                        "name": "_underlyingCollateral",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69164,
                        "src": "21117:21:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 70083,
                        "name": "_underlyingAsset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69166,
                        "src": "21153:16:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 70084,
                        "name": "_underlyingMaxTokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69168,
                        "src": "21183:21:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 70085,
                        "name": "_underlyingMinTokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69170,
                        "src": "21218:21:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 70080,
                        "name": "pool",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70074,
                        "src": "21086:4:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$48084",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "id": 70081,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "21091:12:158",
                      "memberName": "getReserveId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 48009,
                      "src": "21086:17:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,address,uint256,uint256) view external returns (uint256)"
                      }
                    },
                    "id": 70086,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21086:163:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21066:183:158"
                },
                {
                  "assignments": [
                    70089
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 70089,
                      "mutability": "mutable",
                      "name": "index",
                      "nameLocation": "21268:5:158",
                      "nodeType": "VariableDeclaration",
                      "scope": 70147,
                      "src": "21260:13:158",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 70088,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "21260:7:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 70094,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 70092,
                        "name": "reserveId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70079,
                        "src": "21308:9:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 70090,
                        "name": "pool",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70074,
                        "src": "21276:4:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$48084",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "id": 70091,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "21281:26:158",
                      "memberName": "getReserveNormalizedIncome",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 47925,
                      "src": "21276:31:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view external returns (uint256)"
                      }
                    },
                    "id": 70093,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21276:42:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21260:58:158"
                },
                {
                  "assignments": [
                    70096
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 70096,
                      "mutability": "mutable",
                      "name": "fromBalanceBefore",
                      "nameLocation": "21345:17:158",
                      "nodeType": "VariableDeclaration",
                      "scope": 70147,
                      "src": "21337:25:158",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 70095,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "21337:7:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 70104,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 70102,
                        "name": "index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70089,
                        "src": "21394:5:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 70099,
                            "name": "from",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 70063,
                            "src": "21381:4:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 70097,
                            "name": "super",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -25,
                            "src": "21365:5:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_super$_FToken_$70240_$",
                              "typeString": "type(contract super FToken)"
                            }
                          },
                          "id": 70098,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "21371:9:158",
                          "memberName": "balanceOf",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 26618,
                          "src": "21365:15:158",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view returns (uint256)"
                          }
                        },
                        "id": 70100,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21365:21:158",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 70101,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "21387:6:158",
                      "memberName": "rayMul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 64384,
                      "src": "21365:28:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 70103,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21365:35:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21337:63:158"
                },
                {
                  "assignments": [
                    70106
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 70106,
                      "mutability": "mutable",
                      "name": "toBalanceBefore",
                      "nameLocation": "21418:15:158",
                      "nodeType": "VariableDeclaration",
                      "scope": 70147,
                      "src": "21410:23:158",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 70105,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "21410:7:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 70114,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 70112,
                        "name": "index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70089,
                        "src": "21463:5:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 70109,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 70065,
                            "src": "21452:2:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 70107,
                            "name": "super",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -25,
                            "src": "21436:5:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_super$_FToken_$70240_$",
                              "typeString": "type(contract super FToken)"
                            }
                          },
                          "id": 70108,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "21442:9:158",
                          "memberName": "balanceOf",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 26618,
                          "src": "21436:15:158",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view returns (uint256)"
                          }
                        },
                        "id": 70110,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21436:19:158",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 70111,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "21456:6:158",
                      "memberName": "rayMul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 64384,
                      "src": "21436:26:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 70113,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21436:33:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21410:59:158"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 70118,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70063,
                        "src": "21504:4:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 70119,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70065,
                        "src": "21510:2:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 70122,
                            "name": "index",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 70089,
                            "src": "21528:5:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 70120,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 70067,
                            "src": "21514:6:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 70121,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "21521:6:158",
                          "memberName": "rayDiv",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 64411,
                          "src": "21514:13:158",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 70123,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21514:20:158",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 70115,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "21488:5:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_super$_FToken_$70240_$",
                          "typeString": "type(contract super FToken)"
                        }
                      },
                      "id": 70117,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "21494:9:158",
                      "memberName": "_transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 72177,
                      "src": "21488:15:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 70124,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21488:47:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 70125,
                  "nodeType": "ExpressionStatement",
                  "src": "21488:47:158"
                },
                {
                  "condition": {
                    "id": 70126,
                    "name": "validate",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 70069,
                    "src": "21550:8:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 70139,
                  "nodeType": "IfStatement",
                  "src": "21546:239:158",
                  "trueBody": {
                    "id": 70138,
                    "nodeType": "Block",
                    "src": "21560:225:158",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 70130,
                              "name": "reserveId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70079,
                              "src": "21613:9:158",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 70131,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70063,
                              "src": "21640:4:158",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 70132,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70065,
                              "src": "21663:2:158",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 70133,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70067,
                              "src": "21684:6:158",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 70134,
                              "name": "fromBalanceBefore",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70096,
                              "src": "21709:17:158",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 70135,
                              "name": "toBalanceBefore",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70106,
                              "src": "21745:15:158",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 70127,
                              "name": "pool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70074,
                              "src": "21574:4:158",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ILendingPool_$48084",
                                "typeString": "contract ILendingPool"
                              }
                            },
                            "id": 70129,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "21579:16:158",
                            "memberName": "finalizeTransfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 47981,
                            "src": "21574:21:158",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_uint256_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (uint256,address,address,uint256,uint256,uint256) view external"
                            }
                          },
                          "id": 70136,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "21574:200:158",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 70137,
                        "nodeType": "ExpressionStatement",
                        "src": "21574:200:158"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 70141,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70063,
                        "src": "21816:4:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 70142,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70065,
                        "src": "21822:2:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 70143,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70067,
                        "src": "21826:6:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 70144,
                        "name": "index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70089,
                        "src": "21834:5:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 70140,
                      "name": "BalanceTransfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 47286,
                      "src": "21800:15:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256)"
                      }
                    },
                    "id": 70145,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21800:40:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 70146,
                  "nodeType": "EmitStatement",
                  "src": "21795:45:158"
                }
              ]
            },
            "documentation": {
              "id": 70061,
              "nodeType": "StructuredDocumentation",
              "src": "20537:343:158",
              "text": " @dev Transfers the fTokens between two users. Validates the transfer\n (ie checks for valid HF after the transfer) if required\n @param from The source address\n @param to The destination address\n @param amount The amount getting transferred\n @param validate `true` if the transfer needs to be validated*"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_transfer",
            "nameLocation": "20894:9:158",
            "parameters": {
              "id": 70070,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 70063,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "20921:4:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 70148,
                  "src": "20913:12:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 70062,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20913:7:158",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 70065,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "20943:2:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 70148,
                  "src": "20935:10:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 70064,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20935:7:158",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 70067,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "20963:6:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 70148,
                  "src": "20955:14:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 70066,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20955:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 70069,
                  "mutability": "mutable",
                  "name": "validate",
                  "nameLocation": "20984:8:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 70148,
                  "src": "20979:13:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 70068,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "20979:4:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20903:95:158"
            },
            "returnParameters": {
              "id": 70071,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "21008:0:158"
            },
            "scope": 70240,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 70167,
            "nodeType": "FunctionDefinition",
            "src": "22088:152:158",
            "nodes": [],
            "body": {
              "id": 70166,
              "nodeType": "Block",
              "src": "22190:50:158",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 70160,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70151,
                        "src": "22210:4:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 70161,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70153,
                        "src": "22216:2:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 70162,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70155,
                        "src": "22220:6:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "hexValue": "74727565",
                        "id": 70163,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "22228:4:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 70159,
                      "name": "_transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        70148,
                        70167
                      ],
                      "referencedDeclaration": 70148,
                      "src": "22200:9:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bool_$returns$__$",
                        "typeString": "function (address,address,uint256,bool)"
                      }
                    },
                    "id": 70164,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22200:33:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 70165,
                  "nodeType": "ExpressionStatement",
                  "src": "22200:33:158"
                }
              ]
            },
            "baseFunctions": [
              72177
            ],
            "documentation": {
              "id": 70149,
              "nodeType": "StructuredDocumentation",
              "src": "21853:230:158",
              "text": " @dev Overrides the parent _transfer to force validated transfer() and transferFrom()\n @param from The source address\n @param to The destination address\n @param amount The amount getting transferred*"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_transfer",
            "nameLocation": "22097:9:158",
            "overrides": {
              "id": 70157,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "22176:8:158"
            },
            "parameters": {
              "id": 70156,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 70151,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "22115:4:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 70167,
                  "src": "22107:12:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 70150,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "22107:7:158",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 70153,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "22129:2:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 70167,
                  "src": "22121:10:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 70152,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "22121:7:158",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 70155,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "22141:6:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 70167,
                  "src": "22133:14:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 70154,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22133:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "22106:42:158"
            },
            "returnParameters": {
              "id": 70158,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "22190:0:158"
            },
            "scope": 70240,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 70199,
            "nodeType": "FunctionDefinition",
            "src": "22385:332:158",
            "nodes": [],
            "body": {
              "id": 70198,
              "nodeType": "Block",
              "src": "22469:248:158",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    70178
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 70178,
                      "mutability": "mutable",
                      "name": "creatorPercentage",
                      "nameLocation": "22487:17:158",
                      "nodeType": "VariableDeclaration",
                      "scope": 70198,
                      "src": "22479:25:158",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 70177,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "22479:7:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 70180,
                  "initialValue": {
                    "id": 70179,
                    "name": "_creatorPercentage",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 69172,
                    "src": "22507:18:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "22479:46:158"
                },
                {
                  "assignments": [
                    70182
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 70182,
                      "mutability": "mutable",
                      "name": "creatorAmount",
                      "nameLocation": "22552:13:158",
                      "nodeType": "VariableDeclaration",
                      "scope": 70198,
                      "src": "22544:21:158",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 70181,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "22544:7:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 70187,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 70185,
                        "name": "creatorPercentage",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70178,
                        "src": "22586:17:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 70183,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70170,
                        "src": "22568:6:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 70184,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "22575:10:158",
                      "memberName": "percentMul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 64205,
                      "src": "22568:17:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 70186,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22568:36:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "22544:60:158"
                },
                {
                  "assignments": [
                    70189
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 70189,
                      "mutability": "mutable",
                      "name": "treasuryAmount",
                      "nameLocation": "22622:14:158",
                      "nodeType": "VariableDeclaration",
                      "scope": 70198,
                      "src": "22614:22:158",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 70188,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "22614:7:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 70193,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 70192,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 70190,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 70170,
                      "src": "22639:6:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "id": 70191,
                      "name": "creatorAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 70182,
                      "src": "22648:13:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "22639:22:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "22614:47:158"
                },
                {
                  "expression": {
                    "components": [
                      {
                        "id": 70194,
                        "name": "creatorAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70182,
                        "src": "22680:13:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 70195,
                        "name": "treasuryAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70189,
                        "src": "22695:14:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 70196,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "22679:31:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 70176,
                  "id": 70197,
                  "nodeType": "Return",
                  "src": "22672:38:158"
                }
              ]
            },
            "documentation": {
              "id": 70168,
              "nodeType": "StructuredDocumentation",
              "src": "22246:134:158",
              "text": " @dev Splits protocol repayment amounts between the creator and treasury\n @param amount The amount getting split*"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_splitWithCreator",
            "nameLocation": "22394:17:158",
            "parameters": {
              "id": 70171,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 70170,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "22420:6:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 70199,
                  "src": "22412:14:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 70169,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22412:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "22411:16:158"
            },
            "returnParameters": {
              "id": 70176,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 70173,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 70199,
                  "src": "22451:7:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 70172,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22451:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 70175,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 70199,
                  "src": "22460:7:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 70174,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22460:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "22450:18:158"
            },
            "scope": 70240,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 70239,
            "nodeType": "FunctionDefinition",
            "src": "22862:478:158",
            "nodes": [],
            "body": {
              "id": 70238,
              "nodeType": "Block",
              "src": "22964:376:158",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    70212
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 70212,
                      "mutability": "mutable",
                      "name": "callerAmount",
                      "nameLocation": "22990:12:158",
                      "nodeType": "VariableDeclaration",
                      "scope": 70238,
                      "src": "22982:20:158",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 70211,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "22982:7:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 70217,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 70215,
                        "name": "_auctionCallerPercentage",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69174,
                        "src": "23023:24:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 70213,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70202,
                        "src": "23005:6:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 70214,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "23012:10:158",
                      "memberName": "percentMul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 64205,
                      "src": "23005:17:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 70216,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23005:43:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "22982:66:158"
                },
                {
                  "assignments": [
                    70219
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 70219,
                      "mutability": "mutable",
                      "name": "creatorAmount",
                      "nameLocation": "23101:13:158",
                      "nodeType": "VariableDeclaration",
                      "scope": 70238,
                      "src": "23093:21:158",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 70218,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "23093:7:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 70224,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 70222,
                        "name": "_auctionCreatorPercentage",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 69176,
                        "src": "23135:25:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 70220,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70202,
                        "src": "23117:6:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 70221,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "23124:10:158",
                      "memberName": "percentMul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 64205,
                      "src": "23117:17:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 70223,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23117:44:158",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23093:68:158"
                },
                {
                  "assignments": [
                    70226
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 70226,
                      "mutability": "mutable",
                      "name": "treasuryAmount",
                      "nameLocation": "23216:14:158",
                      "nodeType": "VariableDeclaration",
                      "scope": 70238,
                      "src": "23208:22:158",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 70225,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "23208:7:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 70232,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 70231,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 70229,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 70227,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70202,
                        "src": "23233:6:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "id": 70228,
                        "name": "callerAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70212,
                        "src": "23242:12:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "23233:21:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "id": 70230,
                      "name": "creatorAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 70219,
                      "src": "23257:13:158",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "23233:37:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23208:62:158"
                },
                {
                  "expression": {
                    "components": [
                      {
                        "id": 70233,
                        "name": "callerAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70212,
                        "src": "23289:12:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 70234,
                        "name": "creatorAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70219,
                        "src": "23303:13:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 70235,
                        "name": "treasuryAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70226,
                        "src": "23318:14:158",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 70236,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "23288:45:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 70210,
                  "id": 70237,
                  "nodeType": "Return",
                  "src": "23281:52:158"
                }
              ]
            },
            "documentation": {
              "id": 70200,
              "nodeType": "StructuredDocumentation",
              "src": "22723:134:158",
              "text": " @dev Splits protocol repayment amounts between the creator and treasury\n @param amount The amount getting split*"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_splitWithCallerAndCreator",
            "nameLocation": "22871:26:158",
            "parameters": {
              "id": 70203,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 70202,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "22906:6:158",
                  "nodeType": "VariableDeclaration",
                  "scope": 70239,
                  "src": "22898:14:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 70201,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22898:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "22897:16:158"
            },
            "returnParameters": {
              "id": 70210,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 70205,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 70239,
                  "src": "22937:7:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 70204,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22937:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 70207,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 70239,
                  "src": "22946:7:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 70206,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22946:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 70209,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 70239,
                  "src": "22955:7:158",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 70208,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22955:7:158",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "22936:27:158"
            },
            "scope": 70240,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 69140,
              "name": "Initializable",
              "nameLocations": [
                "1330:13:158"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 26136,
              "src": "1330:13:158"
            },
            "id": 69141,
            "nodeType": "InheritanceSpecifier",
            "src": "1330:13:158"
          },
          {
            "baseName": {
              "id": 69142,
              "name": "IFToken",
              "nameLocations": [
                "1345:7:158"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 47449,
              "src": "1345:7:158"
            },
            "id": 69143,
            "nodeType": "InheritanceSpecifier",
            "src": "1345:7:158"
          },
          {
            "baseName": {
              "id": 69144,
              "name": "IncentivizedERC20",
              "nameLocations": [
                "1354:17:158"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 72276,
              "src": "1354:17:158"
            },
            "id": 69145,
            "nodeType": "InheritanceSpecifier",
            "src": "1354:17:158"
          }
        ],
        "canonicalName": "FToken",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 69139,
          "nodeType": "StructuredDocumentation",
          "src": "1176:135:158",
          "text": "@title FluidNFT ERC20 FToken\n @dev Implementation of the interest bearing token for the FluidNFT protocol\n @author FluidNFT "
        },
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          70240,
          72276,
          27111,
          47449,
          27214,
          27189,
          28988,
          26136,
          48559
        ],
        "name": "FToken",
        "nameLocation": "1320:6:158",
        "scope": 70241,
        "usedErrors": []
      }
    ],
    "license": "AGPL-3.0"
  },
  "id": 158
}
```

</details>


# IFToken

{% tabs %}
{% tab title="IFToken.sol" %}

```solidity
// SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.16;

// import {IAddressProvider} from "./IAddressProvider.sol";
import { IPoolIncentivesController } from "./IPoolIncentivesController.sol";
import { IScaledBalanceToken } from "./IScaledBalanceToken.sol"; 
import { IAddressProvider } from "./IAddressProvider.sol";

import { ConfigTypes } from "../protocol/libraries/types/ConfigTypes.sol";

import { IERC20Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol";
import { IERC20MetadataUpgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol";

interface IFToken is IScaledBalanceToken, IERC20Upgradeable, IERC20MetadataUpgradeable {
    /**
    * @dev Emitted when an fToken is initialized
    * @param underlyingCollateral The address of the underlying collateral
    * @param underlyingAsset The address of the underlying asset
    * @param lendingPool The address of the associated lending pool
    * @param incentivesController The address of the incentives controller for this fToken
    * @param treasury The address of the treasury
    * @param creatorPercentage The address of the creator
    * @param creator The address of the creator
    * @param creator The address of the creator
    **/
    event Initialized(
        address indexed underlyingCollateral,
        address indexed underlyingAsset,
        address indexed lendingPool,
        address incentivesController,
        address treasury,
        address creator,
        uint256 creatorPercentage,
        uint256 auctionCallerPercentage,
        uint256 auctionCreatorPercentage
    );

    /**
    * @dev Emitted after the mint action
    * @param from The address performing the mint
    * @param value The amount being
    * @param index The new liquidity index of the reserve
    **/
    event Mint(address indexed from, uint256 value, uint256 index);

    /**
    * @dev Emitted after fTokens are burned
    * @param from The owner of the fTokens, getting them burned
    * @param target The address that will receive the underlying
    * @param value The amount being burned
    * @param index The new liquidity index of the reserve
    **/
    event Burn(address indexed from, address indexed target, uint256 value, uint256 index);

    /**
    * @dev Emitted during the transfer action
    * @param from The user whose tokens are being transferred
    * @param to The recipient
    * @param value The amount being transferred
    * @param index The new liquidity index of the reserve
    **/
    event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);

    /**
    * @dev Emitted when creator address is updated
    * @param creatorAddress is the new address
    **/
    event CreatorAddressUpdated(uint256 creatorAddress);

    /**
    * @dev Emitted when creator percentage is updated
    * @param creatorPercentage is the new percentage
    **/
    event CreatorPecentageUpdated(uint256 creatorPercentage);

    function initialize(
        IAddressProvider addressProvider,
        ConfigTypes.InitReserveInput calldata input
    ) external;

    function mint(
        address user,
        uint256 amount,
        uint256 index
    ) external returns (bool);

    function burn(
        address user,
        address receiverOfUnderlying,
        uint256 amount,
        uint256 index
    ) external;

    function mintVariableDebtRepaymentToStakeholders(uint256 amount, uint256 index) external;

    function mintStableDebtRepaymentToStakeholders(address user, uint256 amount, uint256 index) external;

    function mintAuctionPaymentToStakeholders(
        address user, 
        address caller, 
        address owner,
        uint256 amount, 
        uint256 liquidationFee,
        uint256 index
    ) external;

    // /**
    //  * @dev Invoked to execute actions on the fToken side after a repayment.
    //  * @param user The user executing the repayment
    //  * @param amount The amount getting repaid
    //  **/
    // function handleRepayment(address user, uint256 amount) external;

    // function handleAuctionPayment(address user, address caller, address owner, uint256 amount, uint256 fee) external;

    function transferUnderlyingTo(address user, uint256 amount) external returns (uint256);

    function getReserveNormalizationFactor() external view returns (uint256);

    function getPoolIncentivesController() external view returns (IPoolIncentivesController);

    function exchangeRate() external view returns (uint256);

    function setReserveCreatorAddress(address creator) external;

    function getReserveCreatorAddress() external view returns (address);

    function setReserveCreatorPercentage(uint256 percentage) external;

    function getReserveCreatorPercentage() external view returns (uint256);

    function setAuctionCallerPercentage(uint256 percentage) external;

    function getAuctionCallerPercentage() external view returns (uint256);

    function setAuctionCreatorPercentage(uint256 percentage) external;

    function getAuctionCreatorPercentage() external view returns (uint256);

    function RESERVE_TREASURY_ADDRESS() external view returns (address);

    function UNDERLYING_COLLATERAL_ADDRESS() external view returns (address);

    function UNDERLYING_ASSET_ADDRESS() external view returns (address);

    function UNDERLYING_MAX_TOKEN_ID() external view returns (uint256);

    function UNDERLYING_MIN_TOKEN_ID() external view returns (uint256);
}
```

{% endtab %}

{% tab title="IPoolIncentivesController.sol" %}

```solidity
// SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.16;
pragma abicoder v2;

import { IScaledBalanceToken } from "./IScaledBalanceToken.sol";

interface IPoolIncentivesController {
    event RewardsAccrued(address indexed _user, uint256 _amount);

    event RewardsClaimed(address indexed _user, uint256 _amount);

    /**
     * @dev Configure assets for a certain rewards emission
     * @param _assets The assets to incentivize
     * @param _emissionsPerSecond The emission for each asset
     */
    function configureAssets(
        IScaledBalanceToken[] calldata _assets,
        uint256[] calldata _emissionsPerSecond
    ) external;

    /**
     * @dev Called by the corresponding asset on any update that affects the rewards distribution
     * @param _user The address of the user
     * @param _totalSupply The total supply of the asset in the lending pool
     * @param _userBalance The balance of the user of the asset in the lending pool
     **/
    function handleAction(
        address _user,
        uint256 _totalSupply,
        uint256 _userBalance
    ) external;

    /**
     * @dev Returns the total of rewards of an user, already accrued + not yet accrued
     * @param _assets The assets to incentivize
     * @param _user The address of the user
     * @return The rewards
     **/
    function getRewardsBalance(
        IScaledBalanceToken[] calldata _assets,
        address _user
    ) external view returns (uint256);

    /**
     * @dev Claims reward for an user, on all the assets of the lending pool, accumulating the pending rewards
     * @param _assets The assets to incentivize
     * @param _amount Amount of rewards to claim
     * @return Rewards claimed
     **/
    function claimRewards(
        IScaledBalanceToken[] calldata _assets,
        uint256 _amount
    ) external returns (uint256);

    /**
     * @dev returns the unclaimed rewards of the user
     * @param _user the address of the user
     * @return the unclaimed user rewards
     */
    function getUserUnclaimedRewards(address _user)
        external
        view
        returns (uint256);
}
```

{% endtab %}

{% tab title="IScaledBalanceToken.sol" %}

```solidity
// SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.16;

interface IScaledBalanceToken {
  /**
   * @dev Returns the scaled balance of the user. The scaled balance is the sum of all the
   * updated stored balance divided by the reserve's liquidity index at the moment of the update
   * @param user The user whose balance is calculated
   * @return The scaled balance of the user
   **/
  function scaledBalanceOf(address user) external view returns (uint256);

  /**
   * @dev Returns the scaled balance of the user and the scaled total supply.
   * @param user The address of the user
   * @return The scaled balance of the user
   * @return The scaled balance and the scaled total supply
   **/
  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);

  /**
   * @dev Returns the scaled total supply of the variable debt token. Represents sum(debt/index)
   * @return The scaled total supply
   **/
  function scaledTotalSupply() external view returns (uint256);
}
```

{% endtab %}

{% tab title="IAddressProvider.sol" %}

```solidity
// SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.16;

/**
 * @title AddressProvider contract
 * @dev Main registry of addresses part of or connected to the protocol, including permissioned roles
 * - Acting also as factory of proxies and admin of those, so with right to change its implementations
 * - Owned by the FluidNFT Governance
 * @author FluidNFT
 **/
interface IAddressProvider {
    event MarketIdSet(string newMarketId);
    event AddressSet(bytes32 id, address indexed newAddress, bool hasProxy);
    event ExecutionDelegateUpdated(address indexed newAddress);
    event ExecutionManagerUpdated(address indexed newAddress);
    event LendingUpdated(address indexed newAddress);
    event PromissoryNoteUpdated(address indexed newAddress);
    event PromissoryNoteBundleUpdated(address indexed newAddress);
    event ObligationReceiptUpdated(address indexed newAddress);
    event ObligationReceiptBundleUpdated(address indexed newAddress);
    event LendingPoolUpdated(address indexed newAddress);
    event ConfiguratorUpdated(address indexed newAddress);
    event CollateralManagerUpdated(address indexed newAddress);
    event PeerAdminUpdated(address indexed newAddress);
    event PoolAdminUpdated(address indexed newAddress);
    event EmergencyAdminUpdated(address indexed newAddress);
    event PriceConsumerUpdated(address indexed newAddress);
    event FluidTokenUpdated(address indexed newAddress);
    event PoolIncentivesControllerUpdated(address indexed newAddress);
    event PeerIncentivesControllerUpdated(address indexed newAddress);
    event ReferralManagerUpdated(address indexed newAddress);
    event TreasuryUpdated(address indexed newAddress);
    event DelegationRegistryUpdated(address indexed newAddress);
    event ProxyCreated(bytes32 id, address indexed newAddress);
    event FTokenImplUpdated(address indexed newAddress);
    event DebtTokenImplUpdated(address indexed newAddress);
    event NFTPriceOracleUpdated(address indexed newAddress);
    event LendingRateManagerUpdated(address indexed newAddress);
    event WETHUpdated(address indexed newAddress);
    event WETHGatewayUpdated(address indexed newAddress);

    function getMarketId() external view returns (string memory);

    function setMarketId(string calldata marketId) external;

    function getAddress(bytes32 id) external view returns (address);

    function setAddress(bytes32 id, address newAddress) external;

    function setAddressAsProxy(
        bytes32 id,
        address impl
    ) external;

    function getExecutionDelegate() external view returns (address);

    function setExecutionDelegate(address executionDelegate) external;

    function getExecutionManager() external view returns (address);

    function setExecutionManager(address executionManager) external;

    function getLending() external view returns (address);

    function setLending(address lending) external;

    function getPromissoryNote() external view returns (address);

    function setPromissoryNote(address promissoryNote) external;

    function getPromissoryNoteBundle() external view returns (address);

    function setPromissoryNoteBundle(address promissoryNote) external;

    function getObligationReceipt() external view returns (address);

    function setObligationReceipt(address obligationReceipt) external;

    function getObligationReceiptBundle() external view returns (address);

    function setObligationReceiptBundle(address obligationReceipt) external;

    function getLendingPool() external view returns (address);

    function setLendingPool(address pool) external;

    function getConfigurator() external view returns (address);

    function setConfigurator(address configurator) external;

    function setConfiguratorImpl(address configurator) external;

    function getCollateralManager() external view returns (address);

    function setCollateralManager(address collateralManager) external;

    function getPeerAdmin() external view returns (address);

    function setPeerAdmin(address admin) external;

    function getPoolAdmin() external view returns (address);

    function setPoolAdmin(address admin) external;

    function getEmergencyAdmin() external view returns (address);

    function setEmergencyAdmin(address admin) external;

    function getNFTPriceOracle() external view returns (address);

    function setNFTPriceOracle(address nftPriceOracle) external;

    function getLendingRateManager() external view returns (address);

    function setLendingRateManager(address lendingRateManager) external;

    function getPriceConsumerV3() external view returns (address);

    function setPriceConsumerV3(address priceConsumerV3) external;

    function getFluidToken() external view returns (address);

    function setFluidToken(address fluidToken) external;

    function getPoolIncentivesController() external view returns (address);

    function setPoolIncentivesController(address controller) external;

    function getPeerIncentivesController() external view returns (address);

    function setPeerIncentivesController(address controller) external;

    function getReferralManager() external view returns (address);

    function setReferralManager(address referralManager) external;

    function getTreasury() external view returns (address);

    function setTreasury(address treasury) external;

    function getDelegationRegistry() external view returns (address);

    function setDelegationRegistry(address delegationRegistry) external;

    function getFTokenImpl() external view returns (address);

    function setFTokenImpl(address fTokenImpl) external;

    function getDebtTokenImpl() external view returns (address);

    function setDebtTokenImpl(address debtTokenImpl) external;

    function getWETH() external view returns (address);

    function setWETH(address weth) external;

    function getWETHGateway() external view returns (address);

    function setWETHGateway(address weth) external;
}
```

{% endtab %}

{% tab title="ConfigTypes.sol" %}

```solidity
// SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.16;

library ConfigTypes {
    struct InitReserveInput {
        //collateral params
        address underlyingCollateral;
        string underlyingCollateralName;
        string underlyingCollateralSymbol;
        uint256 underlyingMaxTokenId;
        uint256 underlyingMinTokenId;
        //asset params
        address underlyingAsset;
        string underlyingAssetName;
        string underlyingAssetSymbol;
        uint8 underlyingAssetDecimals;
        //fToken params
        address fTokenImpl;
        string fTokenName;
        string fTokenSymbol;
        //stable debtToken params
        address stableDebtTokenImpl;
        string stableDebtTokenName;
        string stableDebtTokenSymbol;
        //variable debtToken params
        address variableDebtTokenImpl;
        string variableDebtTokenName;
        string variableDebtTokenSymbol;
        //risk params
        address interestRateStrategy;
        uint256 baseLTV;
        //account params
        address treasury;
        address creator;
        //fee params
        uint256 creatorPercentage;
        //auction params
        uint256 auctionCallerPercentage;
        uint256 auctionCreatorPercentage;
        //oracle params
        string assetPriceFeed;
    }

    struct ConfigReserveInput {
        //reserve params
        uint256 reserveId;
        uint256 reserveFactor;
        //collateral params
        uint256 ltv;
        //asset params
        uint256 decimals;
        //default params
        uint256 gracePeriod;
        uint256 liquidationBonus;
        uint256 liquidationThreshold;
        //auction params
        uint256 auctionDuration;
        uint256 auctionPriceMultiple;
        //conditional params
        bool borrowingEnabled;
    }

    struct InitNFTPriceGroupDataInput {
        address[15] nfts;
        uint256[15] reserveIds; 
        uint256[15] traitIds; 
        uint256[15] basePrices;
    }

    struct BasePriceInput {
        uint256 groupId;
        address[15] nfts;
        uint256[15] traitIds;
        uint256[15] basePrices;
    }

    struct DeltaInput {
        uint256 groupId;
        uint256[15] nfts;
        uint256[15] currentPrices;
    }

    struct UpdateFTokenInput {
        address collateral;
        address asset;
        address implementation;
        uint256 reserveId;
        bytes encodedCallData;
    }

    struct UpdateDebtTokenInput {
        address collateral;
        address asset;
        address implementation;
        uint256 reserveId;
        bytes encodedCallData;
    }
}
```

{% endtab %}
{% endtabs %}


# Debt Tokens

Debt tokens are interest-accruing tokens that are minted and burned on `borrow` and `repay`, representing the debt owed by the token holder. There are 2 types of debt tokens:

* Stable debt tokens, representing a debt to the protocol with a stable interest rate
* Variable debt tokens, representing a debt to the protocol with a variable interest rate

## EIP20 Methods

Although debt tokens are modelled on the ERC20/EIP20 standard, they are non-transferrable. Therefore they do not implement any of the standard ERC20/EIP20 functions relating to `transfer()` and `allowance()`.

{% hint style="info" %}
`balanceOf()` will always return the most up to date accumulated debt of the user.
{% endhint %}

{% hint style="info" %}
`totalSupply()` will always return the most up to date total debt accrued by all protocol users for *that specific type (stable vs variable) of debt token*.
{% endhint %}

## Shared Methods

### UNDERLYING\_ASSET\_ADDRESS()

**`function UNDERLYING_ASSET_ADDRESS()`**

Returns the underlying asset of the debt token.

### POOL()

**`function POOL()`**

Returns the address of the associated `LendingPool` for the debt token.

### approveDelegation\*\*()\*\*

**`function approveDelegation(address delegatee, uint256 amount)`**

Sets the `amount` of allowance for `delegatee` to borrow of a particular debt token.

Used in credit delegation.

| Parameter Name | Type      | Description                           |
| -------------- | --------- | ------------------------------------- |
| `delegatee`    | address   | the user receiving the allowance      |
| `amount`       | `uint256` | the allowance amounts given to `user` |

### borrowAllowance\*\*()\*\*

**`function borrowAllowance(address fromUser, address toUser)`**

Returns the borrow allowance `toUser` has been given by `fromUser`.

Used in credit delegation.

| Parameter Name | Type    | Description                      |
| -------------- | ------- | -------------------------------- |
| `fromUser`     | address | the user giving allowance        |
| `toUser`       | address | the user receiving the allowance |

Returns the current allowance of `toUser` for a particular debt token.

## Stable Debt Methods

### getSupplyData\*\*()\*\*

**`function getSupplyData()`**

Returns the supply / deposit data for the debt token.

#### Return values

| Type    | Description                      |
| ------- | -------------------------------- |
| uint256 | principal supply                 |
| uint256 | total supply                     |
| uint256 | average borrow rate              |
| uint40  | timestamp for last supply update |

### getTotalSupplyAndAvgRate\*\*()\*\*

**`function getTotalSupplyAndAvgRate()`**

Returns the total supply and average stable rate of the token.

#### Return values

| Type    | Description         |
| ------- | ------------------- |
| uint256 | total supply        |
| uint256 | average stable rate |

### **principalBalanceOf()**

**`function principalBalanceOf(address user)`**

Returns the principal debt balance of the `user`.

### getUserLastUpdated\*\*()\*\*

**`function getUserLastUpdated(address user)`**

Returns the timestamp of the last action taken by `user` as `uint40`.

### getAverageStableRate\*\*()\*\*

**`function getAverageStableRate()`**

Returns the average stable rate across all the stable rate debt in the protocol as `uint256`.

### getUserStableRate\*\*()\*\*

**`function getUserStableRate(address user)`**

Returns the stable rate of `user` as `uint256`.

## Variable Debt Methods

### scaledBalanceOf\*\*()\*\*

**`function scaledBalanceOf(address user)`**

Returns the principal debt balance of `user`.

### scaledTotalSupply\*\*()\*\*

**`function scaledTotalSupply()`**

Returns the scaled total supply of the variable debt token.

This represents $$sum( borrows / index )$$ .

### getScaledUserBalanceAndSupply\*\*()\*\*

**`function getScaledUserBalanceAndSupply(address user)`**

Returns the principal balance of the `user` and principal total supply.

#### Return values

| Type    | Description               |
| ------- | ------------------------- |
| uint256 | principal balance of user |
| uint256 | principal total supply    |

## ABI

<details>

<summary>StableDebtToken ABI</summary>

```
{
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "fromUser",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "toUser",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "BorrowAllowanceDelegated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "currentBalance",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "balanceIncrease",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "avgStableRate",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newTotalSupply",
          "type": "uint256"
        }
      ],
      "name": "Burn",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "underlyingCollateral",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "underlyingAsset",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "pool",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "incentivesController",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "debtTokenDecimals",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "debtTokenName",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "debtTokenSymbol",
          "type": "string"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "onBehalfOf",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "currentBalance",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "balanceIncrease",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newRate",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "avgStableRate",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newTotalSupply",
          "type": "uint256"
        }
      ],
      "name": "Mint",
      "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": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "POOL",
      "outputs": [
        {
          "internalType": "contract ILendingPool",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "UNDERLYING_ASSET_ADDRESS",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "delegatee",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approveDelegation",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "fromUser",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "toUser",
          "type": "address"
        }
      ],
      "name": "borrowAllowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "subtractedValue",
          "type": "uint256"
        }
      ],
      "name": "decreaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getAverageStableRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getPoolIncentivesController",
      "outputs": [
        {
          "internalType": "contract IPoolIncentivesController",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getSupplyData",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint40",
          "name": "",
          "type": "uint40"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getTotalSupplyAndAvgRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getTotalSupplyLastUpdated",
      "outputs": [
        {
          "internalType": "uint40",
          "name": "",
          "type": "uint40"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "getUserLastUpdated",
      "outputs": [
        {
          "internalType": "uint40",
          "name": "",
          "type": "uint40"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "getUserStableRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "addedValue",
          "type": "uint256"
        }
      ],
      "name": "increaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "addressProvider",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "underlyingCollateral",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "underlyingAsset",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "underlyingMaxTokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "underlyingMinTokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "debtTokenDecimals",
          "type": "uint8"
        },
        {
          "internalType": "string",
          "name": "debtTokenName",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "debtTokenSymbol",
          "type": "string"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "onBehalfOf",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "rate",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "principalBalanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x608060405234801561001057600080fd5b5061001961001e565b6100de565b600054610100900460ff161561008a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156100dc576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b611df1806100ed6000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c806390f6fcf2116100de578063b3f1c93d11610097578063dd62ed3e11610071578063dd62ed3e14610378578063e748489014610386578063e78c9b3b14610395578063f731e9be146103be57600080fd5b8063b3f1c93d1461033f578063c04a8a1014610352578063c634dfaa1461036557600080fd5b806390f6fcf2146102fd57806395d89b41146103055780639dc29fac1461030d578063a457c2d714610247578063a9059cbb14610320578063b16a19de1461032e57600080fd5b8063313ce5671161014b57806370a082311161012557806370a082311461026d5780637535d24614610280578063797743381461028857806379ce6b8c146102b757600080fd5b8063313ce5671461023257806339509351146102475780636bd76d241461025a57600080fd5b806306fdde0314610193578063095ea7b3146101b157806318160ddd146101d457806319ef9268146101ea5780631e5fa51f1461020a57806323b872dd1461021f575b600080fd5b61019b6103db565b6040516101a89190611885565b60405180910390f35b6101c46101bf3660046118b0565b61046d565b60405190151581526020016101a8565b6101dc6104b6565b6040519081526020016101a8565b6101f26104c8565b6040516001600160a01b0390911681526020016101a8565b61021d61021836600461197f565b6104d2565b005b6101c461022d366004611a47565b61069e565b60655460405160ff90911681526020016101a8565b6101c46102553660046118b0565b6106e2565b6101dc610268366004611a88565b61072d565b6101dc61027b366004611ac1565b61075a565b6101f26107d3565b6102906107dd565b6040805194855260208501939093529183015264ffffffffff1660608201526080016101a8565b6102e76102c5366004611ac1565b6001600160a01b03166000908152606d602052604090205464ffffffffff1690565b60405164ffffffffff90911681526020016101a8565b606c546101dc565b61019b610814565b61021d61031b3660046118b0565b610823565b6101c461022d3660046118b0565b6069546001600160a01b03166101f2565b6101c461034d366004611ade565b610af7565b61021d6103603660046118b0565b610e9c565b6101dc610373366004611ac1565b610f13565b6101dc610255366004611a88565b606f5464ffffffffff166102e7565b6101dc6103a3366004611ac1565b6001600160a01b03166000908152606e602052604090205490565b6103c6610f1e565b604080519283526020830191909152016101a8565b6060603680546103ea90611b24565b80601f016020809104026020016040519081016040528092919081815260200182805461041690611b24565b80156104635780601f1061043857610100808354040283529160200191610463565b820191906000526020600020905b81548152906001019060200180831161044657829003601f168201915b5050505050905090565b60405162461bcd60e51b81526020600482015260166024820152751054141493d5905317d393d517d4d5541413d495115160521b60448201526000906064015b60405180910390fd5b60006104c3606c54610f37565b905090565b60006104c3610f82565b600054610100900460ff16158080156104f25750600054600160ff909116105b8061050c5750303b15801561050c575060005460ff166001145b61056f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104ad565b6000805460ff191660011790558015610592576000805461ff0019166101001790555b61059d838386610ff0565b606780546001600160a01b03808c166001600160a01b031992831617909255606880548b841690831617905560698054928a1692909116919091179055606a869055606b8590556105ec611012565b6001600160a01b0316876001600160a01b0316896001600160a01b03167fd59b5facb5e38ab634162423aec2545750f69daf91fe145954e2a2b449597d4c610632610f82565b8888886040516106459493929190611b5e565b60405180910390a48015610693576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b60405162461bcd60e51b81526020600482015260166024820152751514905394d1915497d393d517d4d5541413d495115160521b60448201526000906064016104ad565b60405162461bcd60e51b815260206004820152601760248201527f414c4c4f57414e43455f4e4f545f535550504f5254454400000000000000000060448201526000906064016104ad565b6001600160a01b038083166000908152606660209081526040808320938516835292905220545b92915050565b6000806107668361105c565b6001600160a01b0384166000908152606e6020526040812054919250829003610793575060009392505050565b6001600160a01b0384166000908152606d60205260408120546107be90839064ffffffffff16611077565b90506107ca83826110bd565b95945050505050565b60006104c3611012565b6000806000806000606c5490506107f360355490565b6107fc82610f37565b606f54919790965091945064ffffffffff1692509050565b6060603780546103ea90611b24565b61082b611012565b6001600160a01b0316336001600160a01b0316146040518060400160405280600381526020016203530360ec1b815250906108795760405162461bcd60e51b81526004016104ad9190611885565b5060008061088684611100565b925092505060006108956104b6565b6001600160a01b0386166000908152606e60205260408120549192509081908684116108c5576000606c5561093d565b6108cf848861115c565b915060006108e86108df86611168565b606c54906110bd565b905060006108ff6108f88a611168565b84906110bd565b9050818110610916576000606c819055945061093a565b61093261092285611168565b61092c848461115c565b90611178565b606c81905594505b50505b85870361097a576001600160a01b0388166000908152606e60209081526040808320839055606d9091529020805464ffffffffff191690556109a8565b6001600160a01b0388166000908152606d60205260409020805464ffffffffff19164264ffffffffff161790555b606f805464ffffffffff19164264ffffffffff1617905586851115610a495760006109d3868961115c565b90506109e08982876111ac565b6040805182815260208101899052908101879052606081018390526080810185905260a081018490526001600160a01b038a169081907fc16f4e4ca34d790de4c656c72fd015c667d688f20be64eea360618545c4c530f9060c00160405180910390a350610abe565b6000610a55888761115c565b9050610a6289828761124a565b604080518281526020810189905290810187905260608101859052608081018490526001600160a01b038a16907f44bd20a79e993bdcc7cbedf54a3b4d19fb78490124b6b90d04fe3242eea579e89060a00160405180910390a2505b6040518781526000906001600160a01b038a1690600080516020611d9c8339815191529060200160405180910390a35050505050505050565b6000610b01611012565b6001600160a01b0316336001600160a01b0316146040518060400160405280600381526020016203530360ec1b81525090610b4f5760405162461bcd60e51b81526004016104ad9190611885565b50610b826040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b846001600160a01b0316866001600160a01b031614158015610c2c5750606760009054906101000a90046001600160a01b03166001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c169190611ba8565b6001600160a01b0316866001600160a01b031614155b15610c3c57610c3c8587866112a0565b600080610c4887611100565b9250925050610c556104b6565b808452606c546080850152610c6a90876113c0565b6020840152610c7886611168565b6040840152610cd6610c92610c8d84896113c0565b611168565b604085015161092c90610ca590896110bd565b610cd0610cb187611168565b6001600160a01b038d166000908152606e6020526040902054906110bd565b906113c0565b6060840181905260408051808201909152600381526234383560e81b6020820152906fffffffffffffffffffffffffffffffff1015610d285760405162461bcd60e51b81526004016104ad9190611885565b5060608301516001600160a01b0388166000908152606e6020908152604080832093909355606d8152919020805464ffffffffff421664ffffffffff199182168117909255606f80549091169091179055830151610dbe90610d8990611168565b61092c610da38660400151896110bd90919063ffffffff16565b610cd0610db38860000151611168565b6080890151906110bd565b606c8190556080840152610ddd87610dd688846113c0565b85516111ac565b6040518681526001600160a01b03881690600090600080516020611d9c8339815191529060200160405180910390a3866001600160a01b0316886001600160a01b03167fc16f4e4ca34d790de4c656c72fd015c667d688f20be64eea360618545c4c530f888585886060015189608001518a60200151604051610e8896959493929190958652602086019490945260408501929092526060840152608083015260a082015260c00190565b60405180910390a350159695505050505050565b3360008181526066602090815260408083206001600160a01b038781168086529190935292208490556069549192917fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e19116604080516001600160a01b039092168252602082018690520160405180910390a35050565b60006107548261105c565b606c546000908190610f2f81610f37565b939092509050565b600080610f4360355490565b905080600003610f565750600092915050565b606f54600090610f6e90859064ffffffffff166113cc565b9050610f7a82826110bd565b949350505050565b6067546040805163033df24d60e31b815290516000926001600160a01b0316916319ef92689160048083019260209291908290030181865afa158015610fcc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c39190611ba8565b610ffa83836113d9565b6065805460ff191660ff929092169190911790555050565b60675460408051630261bf8b60e01b815290516000926001600160a01b031691630261bf8b9160048083019260209291908290030181865afa158015610fcc573d6000803e3d6000fd5b6001600160a01b031660009081526033602052604090205490565b60008061108b64ffffffffff841642611bdb565b90506b033b2e3c9fd0803ce80000006301e133806110a98387611bee565b6110b39190611c0d565b610f7a9190611c2f565b60006110f96b033b2e3c9fd0803ce80000006110f36110dc868661140e565b610cd060026b033b2e3c9fd0803ce8000000611c0d565b9061141a565b9392505050565b60008060008061110f8561105c565b90508060000361112a57600080600093509350935050611155565b600061113f826111398861075a565b9061115c565b90508161114c81836113c0565b90955093509150505b9193909250565b60006110f98284611bdb565b600061075482633b9aca0061140e565b600080611186600284611c0d565b9050610f7a836110f36111a5876b033b2e3c9fd0803ce800000061140e565b84906113c0565b60006111b78461105c565b90506111c38484611426565b60006111cd610f82565b90506001600160a01b03811615611243576040516318c39f1760e11b81526001600160a01b03868116600483015260248201859052604482018490528216906331873e2e90606401600060405180830381600087803b15801561122f57600080fd5b505af1158015610693573d6000803e3d6000fd5b5050505050565b60006112558461105c565b905082811015604051806040016040528060038152602001621a1c1b60e91b815250906112955760405162461bcd60e51b81526004016104ad9190611885565b506111c384846114dc565b6001600160a01b038084166000908152606660209081526040808320938616835292815290829020548251808401909352600383526235303360e81b918301919091528211156113035760405162461bcd60e51b81526004016104ad9190611885565b506001600160a01b038084166000908152606660209081526040808320938616835292905290812054611337908390611bdb565b6001600160a01b038086166000818152606660209081526040808320948916808452949091529020839055919250907fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e16113996069546001600160a01b031690565b604080516001600160a01b039092168252602082018690520160405180910390a350505050565b60006110f98284611c2f565b60006110f9838342611500565b600054610100900460ff166114005760405162461bcd60e51b81526004016104ad90611c42565b61140a8282611629565b5050565b60006110f98284611bee565b60006110f98284611c0d565b600061143160355490565b9050600061143e8461105c565b905061144a848461166e565b6000611454610f82565b6001600160a01b0316146114d65761146a610f82565b6040516318c39f1760e11b81526001600160a01b038681166004830152602482018590526044820184905291909116906331873e2e90606401600060405180830381600087803b1580156114bd57600080fd5b505af11580156114d1573d6000803e3d6000fd5b505050505b50505050565b60006114e760355490565b905060006114f48461105c565b905061144a848461171d565b60008061151464ffffffffff851684611bdb565b905080600003611533576b033b2e3c9fd0803ce80000009150506110f9565b6000611540600183611bdb565b905060006002831161155357600061155e565b61155e600284611bdb565b905060006115706301e1338089611c0d565b9050600061157e82806110bd565b9050600061158c82846110bd565b9050600060028361159d888a611bee565b6115a79190611bee565b6115b19190611c0d565b90506000600683876115c38a8c611bee565b6115cd9190611bee565b6115d79190611bee565b6115e19190611c0d565b905080826115ef8a88611bee565b611605906b033b2e3c9fd0803ce8000000611c2f565b61160f9190611c2f565b6116199190611c2f565b9c9b505050505050505050505050565b600054610100900460ff166116505760405162461bcd60e51b81526004016104ad90611c42565b603661165c8382611cdb565b5060376116698282611cdb565b505050565b6001600160a01b0382166116c45760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104ad565b80603560008282546116d69190611c2f565b90915550506001600160a01b038216600081815260336020908152604080832080548601905551848152600080516020611d9c833981519152910160405180910390a35050565b6001600160a01b03821661177d5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104ad565b6001600160a01b038216600090815260336020526040902054818110156117f15760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104ad565b6001600160a01b0383166000818152603360209081526040808320868603905560358054879003905551858152919291600080516020611d9c833981519152910160405180910390a3505050565b6000815180845260005b8181101561186557602081850181015186830182015201611849565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006110f9602083018461183f565b6001600160a01b03811681146118ad57600080fd5b50565b600080604083850312156118c357600080fd5b82356118ce81611898565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261190357600080fd5b813567ffffffffffffffff8082111561191e5761191e6118dc565b604051601f8301601f19908116603f01168101908282118183101715611946576119466118dc565b8160405283815286602085880101111561195f57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600080600080610100898b03121561199c57600080fd5b88356119a781611898565b975060208901356119b781611898565b965060408901356119c781611898565b9550606089013594506080890135935060a089013560ff811681146119eb57600080fd5b925060c089013567ffffffffffffffff80821115611a0857600080fd5b611a148c838d016118f2565b935060e08b0135915080821115611a2a57600080fd5b50611a378b828c016118f2565b9150509295985092959890939650565b600080600060608486031215611a5c57600080fd5b8335611a6781611898565b92506020840135611a7781611898565b929592945050506040919091013590565b60008060408385031215611a9b57600080fd5b8235611aa681611898565b91506020830135611ab681611898565b809150509250929050565b600060208284031215611ad357600080fd5b81356110f981611898565b60008060008060808587031215611af457600080fd5b8435611aff81611898565b93506020850135611b0f81611898565b93969395505050506040820135916060013590565b600181811c90821680611b3857607f821691505b602082108103611b5857634e487b7160e01b600052602260045260246000fd5b50919050565b6001600160a01b038516815260ff84166020820152608060408201819052600090611b8b9083018561183f565b8281036060840152611b9d818561183f565b979650505050505050565b600060208284031215611bba57600080fd5b81516110f981611898565b634e487b7160e01b600052601160045260246000fd5b8181038181111561075457610754611bc5565b6000816000190483118215151615611c0857611c08611bc5565b500290565b600082611c2a57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561075457610754611bc5565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b601f82111561166957600081815260208120601f850160051c81016020861015611cb45750805b601f850160051c820191505b81811015611cd357828155600101611cc0565b505050505050565b815167ffffffffffffffff811115611cf557611cf56118dc565b611d0981611d038454611b24565b84611c8d565b602080601f831160018114611d3e5760008415611d265750858301515b600019600386901b1c1916600185901b178555611cd3565b600085815260208120601f198616915b82811015611d6d57888601518255948401946001909101908401611d4e565b5085821015611d8b5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212204f5f21f5925202fd57687ffc69e6cc118f51001ebb99222cf0b10110cd3e90ee64736f6c63430008100033",
    "sourceMap": "1327:15512:160:-:0;;;1948:55;;;;;;;;;-1:-1:-1;1973:22:160;:20;:22::i;:::-;1327:15512;;5928:279:18;5996:13;;;;;;;5995:14;5987:66;;;;-1:-1:-1;;;5987:66:18;;216:2:187;5987:66:18;;;198:21:187;255:2;235:18;;;228:30;294:34;274:18;;;267:62;-1:-1:-1;;;345:18:187;;;338:37;392:19;;5987:66:18;;;;;;;;6067:12;;6082:15;6067:12;;;:30;6063:138;;;6113:12;:30;;-1:-1:-1;;6113:30:18;6128:15;6113:30;;;;;;6162:28;;564:36:187;;;6162:28:18;;552:2:187;537:18;6162:28:18;;;;;;;6063:138;5928:279::o;422:184:187:-;1327:15512:160;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x608060405234801561001057600080fd5b506004361061018e5760003560e01c806390f6fcf2116100de578063b3f1c93d11610097578063dd62ed3e11610071578063dd62ed3e14610378578063e748489014610386578063e78c9b3b14610395578063f731e9be146103be57600080fd5b8063b3f1c93d1461033f578063c04a8a1014610352578063c634dfaa1461036557600080fd5b806390f6fcf2146102fd57806395d89b41146103055780639dc29fac1461030d578063a457c2d714610247578063a9059cbb14610320578063b16a19de1461032e57600080fd5b8063313ce5671161014b57806370a082311161012557806370a082311461026d5780637535d24614610280578063797743381461028857806379ce6b8c146102b757600080fd5b8063313ce5671461023257806339509351146102475780636bd76d241461025a57600080fd5b806306fdde0314610193578063095ea7b3146101b157806318160ddd146101d457806319ef9268146101ea5780631e5fa51f1461020a57806323b872dd1461021f575b600080fd5b61019b6103db565b6040516101a89190611885565b60405180910390f35b6101c46101bf3660046118b0565b61046d565b60405190151581526020016101a8565b6101dc6104b6565b6040519081526020016101a8565b6101f26104c8565b6040516001600160a01b0390911681526020016101a8565b61021d61021836600461197f565b6104d2565b005b6101c461022d366004611a47565b61069e565b60655460405160ff90911681526020016101a8565b6101c46102553660046118b0565b6106e2565b6101dc610268366004611a88565b61072d565b6101dc61027b366004611ac1565b61075a565b6101f26107d3565b6102906107dd565b6040805194855260208501939093529183015264ffffffffff1660608201526080016101a8565b6102e76102c5366004611ac1565b6001600160a01b03166000908152606d602052604090205464ffffffffff1690565b60405164ffffffffff90911681526020016101a8565b606c546101dc565b61019b610814565b61021d61031b3660046118b0565b610823565b6101c461022d3660046118b0565b6069546001600160a01b03166101f2565b6101c461034d366004611ade565b610af7565b61021d6103603660046118b0565b610e9c565b6101dc610373366004611ac1565b610f13565b6101dc610255366004611a88565b606f5464ffffffffff166102e7565b6101dc6103a3366004611ac1565b6001600160a01b03166000908152606e602052604090205490565b6103c6610f1e565b604080519283526020830191909152016101a8565b6060603680546103ea90611b24565b80601f016020809104026020016040519081016040528092919081815260200182805461041690611b24565b80156104635780601f1061043857610100808354040283529160200191610463565b820191906000526020600020905b81548152906001019060200180831161044657829003601f168201915b5050505050905090565b60405162461bcd60e51b81526020600482015260166024820152751054141493d5905317d393d517d4d5541413d495115160521b60448201526000906064015b60405180910390fd5b60006104c3606c54610f37565b905090565b60006104c3610f82565b600054610100900460ff16158080156104f25750600054600160ff909116105b8061050c5750303b15801561050c575060005460ff166001145b61056f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104ad565b6000805460ff191660011790558015610592576000805461ff0019166101001790555b61059d838386610ff0565b606780546001600160a01b03808c166001600160a01b031992831617909255606880548b841690831617905560698054928a1692909116919091179055606a869055606b8590556105ec611012565b6001600160a01b0316876001600160a01b0316896001600160a01b03167fd59b5facb5e38ab634162423aec2545750f69daf91fe145954e2a2b449597d4c610632610f82565b8888886040516106459493929190611b5e565b60405180910390a48015610693576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b60405162461bcd60e51b81526020600482015260166024820152751514905394d1915497d393d517d4d5541413d495115160521b60448201526000906064016104ad565b60405162461bcd60e51b815260206004820152601760248201527f414c4c4f57414e43455f4e4f545f535550504f5254454400000000000000000060448201526000906064016104ad565b6001600160a01b038083166000908152606660209081526040808320938516835292905220545b92915050565b6000806107668361105c565b6001600160a01b0384166000908152606e6020526040812054919250829003610793575060009392505050565b6001600160a01b0384166000908152606d60205260408120546107be90839064ffffffffff16611077565b90506107ca83826110bd565b95945050505050565b60006104c3611012565b6000806000806000606c5490506107f360355490565b6107fc82610f37565b606f54919790965091945064ffffffffff1692509050565b6060603780546103ea90611b24565b61082b611012565b6001600160a01b0316336001600160a01b0316146040518060400160405280600381526020016203530360ec1b815250906108795760405162461bcd60e51b81526004016104ad9190611885565b5060008061088684611100565b925092505060006108956104b6565b6001600160a01b0386166000908152606e60205260408120549192509081908684116108c5576000606c5561093d565b6108cf848861115c565b915060006108e86108df86611168565b606c54906110bd565b905060006108ff6108f88a611168565b84906110bd565b9050818110610916576000606c819055945061093a565b61093261092285611168565b61092c848461115c565b90611178565b606c81905594505b50505b85870361097a576001600160a01b0388166000908152606e60209081526040808320839055606d9091529020805464ffffffffff191690556109a8565b6001600160a01b0388166000908152606d60205260409020805464ffffffffff19164264ffffffffff161790555b606f805464ffffffffff19164264ffffffffff1617905586851115610a495760006109d3868961115c565b90506109e08982876111ac565b6040805182815260208101899052908101879052606081018390526080810185905260a081018490526001600160a01b038a169081907fc16f4e4ca34d790de4c656c72fd015c667d688f20be64eea360618545c4c530f9060c00160405180910390a350610abe565b6000610a55888761115c565b9050610a6289828761124a565b604080518281526020810189905290810187905260608101859052608081018490526001600160a01b038a16907f44bd20a79e993bdcc7cbedf54a3b4d19fb78490124b6b90d04fe3242eea579e89060a00160405180910390a2505b6040518781526000906001600160a01b038a1690600080516020611d9c8339815191529060200160405180910390a35050505050505050565b6000610b01611012565b6001600160a01b0316336001600160a01b0316146040518060400160405280600381526020016203530360ec1b81525090610b4f5760405162461bcd60e51b81526004016104ad9190611885565b50610b826040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b846001600160a01b0316866001600160a01b031614158015610c2c5750606760009054906101000a90046001600160a01b03166001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c169190611ba8565b6001600160a01b0316866001600160a01b031614155b15610c3c57610c3c8587866112a0565b600080610c4887611100565b9250925050610c556104b6565b808452606c546080850152610c6a90876113c0565b6020840152610c7886611168565b6040840152610cd6610c92610c8d84896113c0565b611168565b604085015161092c90610ca590896110bd565b610cd0610cb187611168565b6001600160a01b038d166000908152606e6020526040902054906110bd565b906113c0565b6060840181905260408051808201909152600381526234383560e81b6020820152906fffffffffffffffffffffffffffffffff1015610d285760405162461bcd60e51b81526004016104ad9190611885565b5060608301516001600160a01b0388166000908152606e6020908152604080832093909355606d8152919020805464ffffffffff421664ffffffffff199182168117909255606f80549091169091179055830151610dbe90610d8990611168565b61092c610da38660400151896110bd90919063ffffffff16565b610cd0610db38860000151611168565b6080890151906110bd565b606c8190556080840152610ddd87610dd688846113c0565b85516111ac565b6040518681526001600160a01b03881690600090600080516020611d9c8339815191529060200160405180910390a3866001600160a01b0316886001600160a01b03167fc16f4e4ca34d790de4c656c72fd015c667d688f20be64eea360618545c4c530f888585886060015189608001518a60200151604051610e8896959493929190958652602086019490945260408501929092526060840152608083015260a082015260c00190565b60405180910390a350159695505050505050565b3360008181526066602090815260408083206001600160a01b038781168086529190935292208490556069549192917fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e19116604080516001600160a01b039092168252602082018690520160405180910390a35050565b60006107548261105c565b606c546000908190610f2f81610f37565b939092509050565b600080610f4360355490565b905080600003610f565750600092915050565b606f54600090610f6e90859064ffffffffff166113cc565b9050610f7a82826110bd565b949350505050565b6067546040805163033df24d60e31b815290516000926001600160a01b0316916319ef92689160048083019260209291908290030181865afa158015610fcc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c39190611ba8565b610ffa83836113d9565b6065805460ff191660ff929092169190911790555050565b60675460408051630261bf8b60e01b815290516000926001600160a01b031691630261bf8b9160048083019260209291908290030181865afa158015610fcc573d6000803e3d6000fd5b6001600160a01b031660009081526033602052604090205490565b60008061108b64ffffffffff841642611bdb565b90506b033b2e3c9fd0803ce80000006301e133806110a98387611bee565b6110b39190611c0d565b610f7a9190611c2f565b60006110f96b033b2e3c9fd0803ce80000006110f36110dc868661140e565b610cd060026b033b2e3c9fd0803ce8000000611c0d565b9061141a565b9392505050565b60008060008061110f8561105c565b90508060000361112a57600080600093509350935050611155565b600061113f826111398861075a565b9061115c565b90508161114c81836113c0565b90955093509150505b9193909250565b60006110f98284611bdb565b600061075482633b9aca0061140e565b600080611186600284611c0d565b9050610f7a836110f36111a5876b033b2e3c9fd0803ce800000061140e565b84906113c0565b60006111b78461105c565b90506111c38484611426565b60006111cd610f82565b90506001600160a01b03811615611243576040516318c39f1760e11b81526001600160a01b03868116600483015260248201859052604482018490528216906331873e2e90606401600060405180830381600087803b15801561122f57600080fd5b505af1158015610693573d6000803e3d6000fd5b5050505050565b60006112558461105c565b905082811015604051806040016040528060038152602001621a1c1b60e91b815250906112955760405162461bcd60e51b81526004016104ad9190611885565b506111c384846114dc565b6001600160a01b038084166000908152606660209081526040808320938616835292815290829020548251808401909352600383526235303360e81b918301919091528211156113035760405162461bcd60e51b81526004016104ad9190611885565b506001600160a01b038084166000908152606660209081526040808320938616835292905290812054611337908390611bdb565b6001600160a01b038086166000818152606660209081526040808320948916808452949091529020839055919250907fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e16113996069546001600160a01b031690565b604080516001600160a01b039092168252602082018690520160405180910390a350505050565b60006110f98284611c2f565b60006110f9838342611500565b600054610100900460ff166114005760405162461bcd60e51b81526004016104ad90611c42565b61140a8282611629565b5050565b60006110f98284611bee565b60006110f98284611c0d565b600061143160355490565b9050600061143e8461105c565b905061144a848461166e565b6000611454610f82565b6001600160a01b0316146114d65761146a610f82565b6040516318c39f1760e11b81526001600160a01b038681166004830152602482018590526044820184905291909116906331873e2e90606401600060405180830381600087803b1580156114bd57600080fd5b505af11580156114d1573d6000803e3d6000fd5b505050505b50505050565b60006114e760355490565b905060006114f48461105c565b905061144a848461171d565b60008061151464ffffffffff851684611bdb565b905080600003611533576b033b2e3c9fd0803ce80000009150506110f9565b6000611540600183611bdb565b905060006002831161155357600061155e565b61155e600284611bdb565b905060006115706301e1338089611c0d565b9050600061157e82806110bd565b9050600061158c82846110bd565b9050600060028361159d888a611bee565b6115a79190611bee565b6115b19190611c0d565b90506000600683876115c38a8c611bee565b6115cd9190611bee565b6115d79190611bee565b6115e19190611c0d565b905080826115ef8a88611bee565b611605906b033b2e3c9fd0803ce8000000611c2f565b61160f9190611c2f565b6116199190611c2f565b9c9b505050505050505050505050565b600054610100900460ff166116505760405162461bcd60e51b81526004016104ad90611c42565b603661165c8382611cdb565b5060376116698282611cdb565b505050565b6001600160a01b0382166116c45760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104ad565b80603560008282546116d69190611c2f565b90915550506001600160a01b038216600081815260336020908152604080832080548601905551848152600080516020611d9c833981519152910160405180910390a35050565b6001600160a01b03821661177d5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104ad565b6001600160a01b038216600090815260336020526040902054818110156117f15760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104ad565b6001600160a01b0383166000818152603360209081526040808320868603905560358054879003905551858152919291600080516020611d9c833981519152910160405180910390a3505050565b6000815180845260005b8181101561186557602081850181015186830182015201611849565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006110f9602083018461183f565b6001600160a01b03811681146118ad57600080fd5b50565b600080604083850312156118c357600080fd5b82356118ce81611898565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261190357600080fd5b813567ffffffffffffffff8082111561191e5761191e6118dc565b604051601f8301601f19908116603f01168101908282118183101715611946576119466118dc565b8160405283815286602085880101111561195f57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600080600080610100898b03121561199c57600080fd5b88356119a781611898565b975060208901356119b781611898565b965060408901356119c781611898565b9550606089013594506080890135935060a089013560ff811681146119eb57600080fd5b925060c089013567ffffffffffffffff80821115611a0857600080fd5b611a148c838d016118f2565b935060e08b0135915080821115611a2a57600080fd5b50611a378b828c016118f2565b9150509295985092959890939650565b600080600060608486031215611a5c57600080fd5b8335611a6781611898565b92506020840135611a7781611898565b929592945050506040919091013590565b60008060408385031215611a9b57600080fd5b8235611aa681611898565b91506020830135611ab681611898565b809150509250929050565b600060208284031215611ad357600080fd5b81356110f981611898565b60008060008060808587031215611af457600080fd5b8435611aff81611898565b93506020850135611b0f81611898565b93969395505050506040820135916060013590565b600181811c90821680611b3857607f821691505b602082108103611b5857634e487b7160e01b600052602260045260246000fd5b50919050565b6001600160a01b038516815260ff84166020820152608060408201819052600090611b8b9083018561183f565b8281036060840152611b9d818561183f565b979650505050505050565b600060208284031215611bba57600080fd5b81516110f981611898565b634e487b7160e01b600052601160045260246000fd5b8181038181111561075457610754611bc5565b6000816000190483118215151615611c0857611c08611bc5565b500290565b600082611c2a57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561075457610754611bc5565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b601f82111561166957600081815260208120601f850160051c81016020861015611cb45750805b601f850160051c820191505b81811015611cd357828155600101611cc0565b505050505050565b815167ffffffffffffffff811115611cf557611cf56118dc565b611d0981611d038454611b24565b84611c8d565b602080601f831160018114611d3e5760008415611d265750858301515b600019600386901b1c1916600185901b178555611cd3565b600085815260208120601f198616915b82811015611d6d57888601518255948401946001909101908401611d4e565b5085821015611d8b5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212204f5f21f5925202fd57687ffc69e6cc118f51001ebb99222cf0b10110cd3e90ee64736f6c63430008100033",
    "sourceMap": "1327:15512:160:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2491:98:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2948:248:162;;;;;;:::i;:::-;;:::i;:::-;;;1288:14:187;;1281:22;1263:41;;1251:2;1236:18;2948:248:162;1123:187:187;12485:204:160;;;:::i;:::-;;;1461:25:187;;;1449:2;1434:18;12485:204:160;1315:177:187;13772:154:160;;;:::i;:::-;;;-1:-1:-1;;;;;1696:32:187;;;1678:51;;1666:2;1651:18;13772:154:160;1497:238:187;2692:1049:160;;;;;;:::i;:::-;;:::i;:::-;;3202:320:162;;;;;;:::i;:::-;;:::i;1025:145:163:-;1149:15;;1025:145;;1149:15;;;;4470:36:187;;4458:2;4443:18;1025:145:163;4328:184:187;3528:226:162;;;;;;:::i;:::-;;:::i;2064:195::-;;;;;;:::i;:::-;;:::i;4682:531:160:-;;;;;;:::i;:::-;;:::i;13582:94::-;;;:::i;11795:343::-;;;:::i;:::-;;;;5621:25:187;;;5677:2;5662:18;;5655:34;;;;5705:18;;;5698:34;5780:12;5768:25;5763:2;5748:18;;5741:53;5608:3;5593:19;11795:343:160;5392:408:187;4128:133:160;;;;;;:::i;:::-;-1:-1:-1;;;;;4236:17:160;4210:6;4236:17;;;:11;:17;;;;;;;;;4128:133;;;;5979:12:187;5967:25;;;5949:44;;5937:2;5922:18;4128:133:160;5805:194:187;3882:121:160;3981:14;;3882:121;;2702:102:23;;;:::i;8118:2582:160:-;;;;;;:::i;:::-;;:::i;2421:253:162:-;;;;;;:::i;13370:108:160:-;13454:16;;-1:-1:-1;;;;;13454:16:160;13370:108;;5992:1938;;;;;;:::i;:::-;;:::i;1593:250:162:-;;;;;;:::i;:::-;;:::i;13113:138:160:-;;;;;;:::i;:::-;;:::i;2680:262:162:-;;;;;;:::i;12787:122:160:-;12880:21;;;;12787:122;;4417:138;;;;;;:::i;:::-;-1:-1:-1;;;;;4525:22:160;4498:7;4525:22;;;:16;:22;;;;;;;4417:138;12233:189;;;:::i;:::-;;;;6916:25:187;;;6972:2;6957:18;;6950:34;;;;6889:18;12233:189:160;6742:248:187;2491:98:23;2545:13;2577:5;2570:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2491:98;:::o;2948:248:162:-;3157:32;;-1:-1:-1;;;3157:32:162;;7582:2:187;3157:32:162;;;7564:21:187;7621:2;7601:18;;;7594:30;-1:-1:-1;;;7640:18:187;;;7633:52;3103:4:162;;7702:18:187;;3157:32:162;;;;;;;;12485:204:160;12616:7;12649:32;12666:14;;12649:16;:32::i;:::-;12642:39;;12485:204;:::o;13772:154::-;13843:25;13888:30;:28;:30::i;2692:1049::-;3268:19:18;3291:13;;;;;;3290:14;;3336:34;;;;-1:-1:-1;3354:12:18;;3369:1;3354:12;;;;:16;3336:34;3335:108;;;-1:-1:-1;3415:4:18;1476:19:32;:23;;;3376:66:18;;-1:-1:-1;3425:12:18;;;;;:17;3376:66;3314:201;;;;-1:-1:-1;;;3314:201:18;;7933:2:187;3314:201:18;;;7915:21:187;7972:2;7952:18;;;7945:30;8011:34;7991:18;;;7984:62;-1:-1:-1;;;8062:18:187;;;8055:44;8116:19;;3314:201:18;7731:410:187;3314:201:18;3525:12;:16;;-1:-1:-1;;3525:16:18;3540:1;3525:16;;;3551:65;;;;3585:13;:20;;-1:-1:-1;;3585:20:18;;;;;3551:65;3091:75:160::1;3116:13;3131:15;3148:17;3091:24;:75::i;:::-;3179:16;:52:::0;;-1:-1:-1;;;;;3179:52:160;;::::1;-1:-1:-1::0;;;;;;3179:52:160;;::::1;;::::0;;;3244:21:::1;:44:::0;;;;::::1;::::0;;::::1;;::::0;;3299:16:::1;:34:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;3344:21:::1;:44:::0;;;3399:21:::1;:44:::0;;;3560:17:::1;:15;:17::i;:::-;-1:-1:-1::0;;;;;3461:272:160::1;3522:15;-1:-1:-1::0;;;;;3461:272:160::1;3487:20;-1:-1:-1::0;;;;;3461:272:160::1;;3601:30;:28;:30::i;:::-;3647:17;3679:13;3707:15;3461:272;;;;;;;;;:::i;:::-;;;;;;;;3640:14:18::0;3636:99;;;3686:5;3670:21;;-1:-1:-1;;3670:21:18;;;3710:14;;-1:-1:-1;4470:36:187;;3710:14:18;;4458:2:187;4443:18;3710:14:18;;;;;;;3636:99;3258:483;2692:1049:160;;;;;;;;:::o;3202:320:162:-;3483:32;;-1:-1:-1;;;3483:32:162;;9112:2:187;3483:32:162;;;9094:21:187;9151:2;9131:18;;;9124:30;-1:-1:-1;;;9170:18:187;;;9163:52;3411:4:162;;9232:18:187;;3483:32:162;8910:346:187;3528:226:162;3714:33;;-1:-1:-1;;;3714:33:162;;9463:2:187;3714:33:162;;;9445:21:187;9502:2;9482:18;;;9475:30;9541:25;9521:18;;;9514:53;3657:4:162;;9584:18:187;;3714:33:162;9261:347:187;2064:195:162;-1:-1:-1;;;;;2217:27:162;;;2187:7;2217:27;;;:17;:27;;;;;;;;:35;;;;;;;;;;2064:195;;;;;:::o;4682:531:160:-;4844:7;4870:22;4895:24;4911:7;4895:15;:24::i;:::-;-1:-1:-1;;;;;4951:25:160;;4930:18;4951:25;;;:16;:25;;;;;;4870:49;;-1:-1:-1;4991:19:160;;;4987:60;;-1:-1:-1;5034:1:160;;4682:531;-1:-1:-1;;;4682:531:160:o;4987:60::-;-1:-1:-1;;;;;5135:20:160;;5057:16;5135:20;;;:11;:20;;;;;;5089:67;;5123:10;;5135:20;;5089:33;:67::i;:::-;5057:99;-1:-1:-1;5174:31:160;:14;5057:99;5174:21;:31::i;:::-;5167:38;4682:531;-1:-1:-1;;;;;4682:531:160:o;13582:94::-;13619:12;13651:17;:15;:17::i;11795:343::-;11900:7;11922;11944;11966:6;12000:15;12018:14;;12000:32;;12051:19;3666:12:23;;;3579:106;12051:19:160;12072:25;12089:7;12072:16;:25::i;:::-;12108:21;;12043:87;;;;-1:-1:-1;12099:7:160;;-1:-1:-1;12108:21:160;;;-1:-1:-1;11795:343:160;-1:-1:-1;11795:343:160:o;2702:102:23:-;2758:13;2790:7;2783:14;;;;;:::i;8118:2582:160:-;1145:17:162;:15;:17::i;:::-;-1:-1:-1;;;;;1121:42:162;929:10:33;-1:-1:-1;;;;;1121:42:162;;1165:37;;;;;;;;;;;;;-1:-1:-1;;;1165:37:162;;;1113:90;;;;;-1:-1:-1;;;1113:90:162;;;;;;;;:::i;:::-;;8210:22:160::1;8234:23:::0;8261:31:::1;8287:4;8261:25;:31::i;:::-;8207:85;;;;;8305:22;8330:13;:11;:13::i;:::-;-1:-1:-1::0;;;;;8451:22:160;::::1;8354:24;8451:22:::0;;;:16:::1;:22;::::0;;;;;8305:38;;-1:-1:-1;8354:24:160;;;8813;;::::1;8809:790;;8871:1;8854:14;:18:::0;8809:790:::1;;;8918:26;:14:::0;8937:6;8918:18:::1;:26::i;:::-;8905:39;;8959:17;8979:48;9001:25;:14;:23;:25::i;:::-;8979:14;::::0;;:21:::1;:48::i;:::-;8959:68;;9042:18;9063:40;9085:17;:6;:15;:17::i;:::-;9063:14:::0;;:21:::1;:40::i;:::-;9042:61;;9373:9;9359:10;:23;9355:233;;9439:1;9422:14;:18;;;9403:37;;9355:233;;;9517:55;9550:21;:10;:19;:21::i;:::-;9517:25;:9:::0;9531:10;9517:13:::1;:25::i;:::-;:32:::0;::::1;:55::i;:::-;9500:14;:72;;;9481:91;;9355:233;8890:709;;8809:790;9625:14;9615:6;:24:::0;9611:235:::1;;-1:-1:-1::0;;;;;9656:22:160;::::1;9681:1;9656:22:::0;;;:16:::1;:22;::::0;;;;;;;:26;;;9697:11:::1;:17:::0;;;;;:21;;-1:-1:-1;;9697:21:160::1;::::0;;9611:235:::1;;;-1:-1:-1::0;;;;;9791:17:160;::::1;;::::0;;;:11:::1;:17;::::0;;;;:43;;-1:-1:-1;;9791:43:160::1;9818:15;9791:43;;;::::0;;9611:235:::1;9892:21;:47:::0;;-1:-1:-1;;9892:47:160::1;9923:15;9892:47;;;::::0;;9956:24;;::::1;9952:689;;;9997:20;10020:27;:15:::0;10040:6;10020:19:::1;:27::i;:::-;9997:50;;10062:41;10068:4;10074:12;10088:14;10062:5;:41::i;:::-;10123:260;::::0;;9900:25:187;;;9956:2;9941:18;;9934:34;;;9984:18;;;9977:34;;;10042:2;10027:18;;10020:34;;;10085:3;10070:19;;10063:35;;;10129:3;10114:19;;10107:35;;;-1:-1:-1;;;;;10123:260:160;::::1;::::0;;;::::1;::::0;9887:3:187;9872:19;10123:260:160::1;;;;;;;9982:413;9952:689;;;10416:20;10439:27;:6:::0;10450:15;10439:10:::1;:27::i;:::-;10416:50;;10481:41;10487:4;10493:12;10507:14;10481:5;:41::i;:::-;10542:87;::::0;;10412:25:187;;;10468:2;10453:18;;10446:34;;;10496:18;;;10489:34;;;10554:2;10539:18;;10532:34;;;10597:3;10582:19;;10575:35;;;-1:-1:-1;;;;;10542:87:160;::::1;::::0;::::1;::::0;10399:3:187;10384:19;10542:87:160::1;;;;;;;10401:240;9952:689;10658:34;::::0;1461:25:187;;;10681:1:160::1;::::0;-1:-1:-1;;;;;10658:34:160;::::1;::::0;-1:-1:-1;;;;;;;;;;;10658:34:160;1449:2:187;1434:18;10658:34:160::1;;;;;;;8196:2504;;;;;;8118:2582:::0;;:::o;5992:1938::-;6156:4;1145:17:162;:15;:17::i;:::-;-1:-1:-1;;;;;1121:42:162;929:10:33;-1:-1:-1;;;;;1121:42:162;;1165:37;;;;;;;;;;;;;-1:-1:-1;;;1165:37:162;;;1113:90;;;;;-1:-1:-1;;;1113:90:162;;;;;;;;:::i;:::-;;6173:25:160::1;-1:-1:-1::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6173:25:160::1;6237:10;-1:-1:-1::0;;;;;6229:18:160::1;:4;-1:-1:-1::0;;;;;6229:18:160::1;;;:76;;;;;6272:16;;;;;;;;;-1:-1:-1::0;;;;;6272:16:160::1;-1:-1:-1::0;;;;;6272:31:160::1;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6264:41:160::1;:4;-1:-1:-1::0;;;;;6264:41:160::1;;;6229:76;6211:179;;;6328:50;6353:10;6365:4;6371:6;6328:24;:50::i;:::-;6405:22;6429:23:::0;6456:37:::1;6482:10;6456:25;:37::i;:::-;6402:91;;;;;6528:13;:11;:13::i;:::-;6506:35:::0;;;6580:14:::1;::::0;6552:25:::1;::::0;::::1;:42:::0;6623:31:::1;::::0;6647:6;6623:23:::1;:31::i;:::-;6605:15;::::0;::::1;:49:::0;6686:17:::1;:6:::0;:15:::1;:17::i;:::-;6667:16;::::0;::::1;:36:::0;6737:185:::1;6884:37;:26;:14:::0;6903:6;6884:18:::1;:26::i;:::-;:35;:37::i;:::-;6832:16;::::0;::::1;::::0;6737:125:::1;::::0;6832:29:::1;::::0;6856:4;6832:23:::1;:29::i;:::-;6737:76;6787:25;:14;:23;:25::i;:::-;-1:-1:-1::0;;;;;6737:28:160;::::1;;::::0;;;:16:::1;:28;::::0;;;;;;:49:::1;:76::i;:::-;:94:::0;::::1;:125::i;:185::-;6716:18;::::0;::::1;:206:::0;;;6984:31:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;6984:31:160;::::1;::::0;;6965:17:::1;-1:-1:-1::0;6943:39:160::1;6935:81;;;;-1:-1:-1::0;;;6935:81:160::1;;;;;;;;:::i;:::-;-1:-1:-1::0;7058:18:160::1;::::0;::::1;::::0;-1:-1:-1;;;;;7027:28:160;::::1;;::::0;;;:16:::1;:28;::::0;;;;;;;:49;;;;7149:11:::1;:23:::0;;;;;:49;;::::1;7182:15;7149:49;-1:-1:-1::0;;7149:49:160;;::::1;::::0;::::1;::::0;;;7125:21:::1;:73:::0;;;;::::1;::::0;;::::1;::::0;;7458:15;::::1;::::0;7311:174:::1;::::0;7458:26:::1;::::0;:24:::1;:26::i;:::-;7311:129;7410:29;7422:4;:16;;;7410:4;:11;;:29;;;;:::i;:::-;7311:84;7364:30;:4;:19;;;:28;:30::i;:::-;7311:35;::::0;::::1;::::0;;:52:::1;:84::i;:174::-;7294:14;:191:::0;;;7266:25:::1;::::0;::::1;:219:::0;7498:67:::1;7504:10:::0;7516:27:::1;:6:::0;7527:15;7516:10:::1;:27::i;:::-;7545:19:::0;;7498:5:::1;:67::i;:::-;7583:40;::::0;1461:25:187;;;-1:-1:-1;;;;;7583:40:160;::::1;::::0;7600:1:::1;::::0;-1:-1:-1;;;;;;;;;;;7583:40:160;1449:2:187;1434:18;7583:40:160::1;;;;;;;7679:10;-1:-1:-1::0;;;;;7641:242:160::1;7660:4;-1:-1:-1::0;;;;;7641:242:160::1;;7704:6;7725:14;7754:15;7784:4;:18;;;7817:4;:25;;;7857:4;:15;;;7641:242;;;;;;;;;;9900:25:187::0;;;9956:2;9941:18;;9934:34;;;;9999:2;9984:18;;9977:34;;;;10042:2;10027:18;;10020:34;10085:3;10070:19;;10063:35;10129:3;10114:19;;10107:35;9887:3;9872:19;;9613:535;7641:242:160::1;;;;;;;;-1:-1:-1::0;7903:19:160;;5992:1938;-1:-1:-1;;;;;;5992:1938:160:o;1593:250:162:-;929:10:33;1683:31:162;;;;:17;:31;;;;;;;;-1:-1:-1;;;;;1683:42:162;;;;;;;;;;;;:51;;;13454:16:160;;1683:42:162;;929:10:33;1749:87:162;;13454:16:160;1749:87:162;;;-1:-1:-1;;;;;11069:32:187;;;11051:51;;11133:2;11118:18;;11111:34;;;11024:18;1749:87:162;;;;;;;1593:250;;:::o;13113:138:160:-;13195:7;13222:21;13238:4;13222:15;:21::i;12233:189::-;12346:14;;12299:7;;;;12379:25;12346:14;12379:16;:25::i;:::-;12371:43;12406:7;;-1:-1:-1;12233:189:160;-1:-1:-1;12233:189:160:o;14890:405::-;14964:7;14984:23;15010:19;3666:12:23;;;3579:106;15010:19:160;14984:45;;15046:15;15065:1;15046:20;15042:61;;-1:-1:-1;15090:1:160;;14890:405;-1:-1:-1;;14890:405:160:o;15042:61::-;15204:21;;15115:25;;15157:69;;15195:7;;15204:21;;15157:37;:69::i;:::-;15115:111;-1:-1:-1;15246:41:160;:15;15115:111;15246:22;:41::i;:::-;15239:48;14890:405;-1:-1:-1;;;;14890:405:160:o;14020:198::-;14163:16;;:46;;;-1:-1:-1;;;14163:46:160;;;;14092:25;;-1:-1:-1;;;;;14163:16:160;;:44;;:46;;;;;;;;;;;;;;:16;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;758:201:163:-;889:28;902:5;909:7;889:12;:28::i;:::-;926:15;:27;;-1:-1:-1;;926:27:163;;;;;;;;;;;;-1:-1:-1;;758:201:163:o;14527:146:160:-;14631:16;;:33;;;-1:-1:-1;;;14631:33:160;;;;14586:12;;-1:-1:-1;;;;;14631:16:160;;:31;;:33;;;;;;;;;;;;;;:16;:33;;;;;;;;;;;;;;3743:125:23;-1:-1:-1;;;;;3843:18:23;3817:7;3843:18;;;:9;:18;;;;;;;3743:125::o;565:303:144:-;663:7;;734:48;753:28;;;734:15;:48;:::i;:::-;709:73;-1:-1:-1;524:4:146;239:8:144;798:23;806:14;798:4;:23;:::i;:::-;797:44;;;;:::i;:::-;796:67;;;;:::i;1291:126:146:-;1352:7;1379:30;524:4;1379:21;1391:8;:1;1397;1391:5;:8::i;:::-;571:7;577:1;524:4;571:7;:::i;1379:21::-;:25;;:30::i;:::-;1372:37;1291:126;-1:-1:-1;;;1291:126:146:o;10990:666:160:-;11103:7;11125;11147;11182:32;11217:21;11233:4;11217:15;:21::i;:::-;11182:56;;11255:24;11283:1;11255:29;11251:78;;11309:1;11312;11315;11301:16;;;;;;;;;11251:78;11417:23;11443:45;11463:24;11443:15;11453:4;11443:9;:15::i;:::-;:19;;:45::i;:::-;11417:71;-1:-1:-1;11523:24:160;11562:45;11523:24;11417:71;11562:28;:45::i;:::-;11501:147;;-1:-1:-1;11501:147:160;-1:-1:-1;11622:15:160;-1:-1:-1;;10990:666:160;;;;;;:::o;3122:96:71:-;3180:7;3206:5;3210:1;3206;:5;:::i;1771:107:146:-;1823:7;1850:20;:1;629:3;1850:5;:20::i;1425:158::-;1486:7;;1522:5;1526:1;1522;:5;:::i;:::-;1506:21;-1:-1:-1;1547:28:146;1573:1;1547:21;1557:10;:1;524:4;1557:5;:10::i;:::-;1547:5;;:9;:21::i;15545:482:160:-;15671:25;15699:24;15715:7;15699:15;:24::i;:::-;15671:52;;15734:28;15746:7;15755:6;15734:11;:28::i;:::-;15775:46;15824:30;:28;:30::i;:::-;15775:79;-1:-1:-1;;;;;;15871:43:160;;;15867:153;;15931:77;;-1:-1:-1;;;15931:77:160;;-1:-1:-1;;;;;12166:32:187;;;15931:77:160;;;12148:51:187;12215:18;;;12208:34;;;12258:18;;;12251:34;;;15931:33:160;;;;;12121:18:187;;15931:77:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15867:153;15660:367;;15545:482;;;:::o;16272:564::-;16398:25;16426:24;16442:7;16426:15;:24::i;:::-;16398:52;;16492:6;16471:17;:27;;16500:31;;;;;;;;;;;;;-1:-1:-1;;;16500:31:160;;;16463:69;;;;;-1:-1:-1;;;16463:69:160;;;;;;;;:::i;:::-;;16543:28;16555:7;16564:6;16543:11;:28::i;4002:501:162:-;-1:-1:-1;;;;;4147:28:162;;;;;;;:17;:28;;;;;;;;:39;;;;;;;;;;;;;4198:37;;;;;;;;;;;-1:-1:-1;;;4198:37:162;;;;;;;4147:49;-1:-1:-1;4147:49:162;4139:97;;;;-1:-1:-1;;;4139:97:162;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;4278:28:162;;;4255:20;4278:28;;;:17;:28;;;;;;;;:39;;;;;;;;;;;;:48;;4320:6;;4278:48;:::i;:::-;-1:-1:-1;;;;;4336:28:162;;;;;;;:17;:28;;;;;;;;:39;;;;;;;;;;;;:54;;;4255:71;;-1:-1:-1;4336:39:162;4406:90;4453:28;13454:16:160;;-1:-1:-1;;;;;13454:16:160;;13370:108;4453:28:162;4406:90;;;-1:-1:-1;;;;;11069:32:187;;;11051:51;;11133:2;11118:18;;11111:34;;;11024:18;4406:90:162;;;;;;;4129:374;4002:501;;;:::o;2755:96:71:-;2813:7;2839:5;2843:1;2839;:5;:::i;2721:200:144:-;2823:7;2845:71;2873:4;2879:19;2900:15;2845:27;:71::i;2114:147:23:-;5363:13:18;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:18;;;;;;;:::i;:::-;2216:38:23::1;2239:5;2246:7;2216:22;:38::i;:::-;2114:147:::0;;:::o;3465:96:71:-;3523:7;3549:5;3553:1;3549;:5;:::i;3850:96::-;3908:7;3934:5;3938:1;3934;:5;:::i;2233:398:163:-;2314:22;2339:19;3666:12:23;;;3579:106;2339:19:163;2314:44;;2365:25;2393:24;2409:7;2393:15;:24::i;:::-;2365:52;;2426:28;2438:7;2447:6;2426:11;:28::i;:::-;2518:1;2475:30;:28;:30::i;:::-;-1:-1:-1;;;;;2467:53:163;;2463:163;;2531:30;:28;:30::i;:::-;:87;;-1:-1:-1;;;2531:87:163;;-1:-1:-1;;;;;12166:32:187;;;2531:87:163;;;12148:51:187;12215:18;;;12208:34;;;12258:18;;;12251:34;;;2531:43:163;;;;;;;12121:18:187;;2531:87:163;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2463:163;2307:324;;2233:398;;:::o;2637:::-;2718:22;2743:19;3666:12:23;;;3579:106;2743:19:163;2718:44;;2769:25;2797:24;2813:7;2797:15;:24::i;:::-;2769:52;;2830:28;2842:7;2851:6;2830:11;:28::i;1609:827:144:-;1753:7;;1813:49;1833:28;;;1813:16;:49;:::i;:::-;1799:63;;1873:3;1880:1;1873:8;1869:52;;524:4:146;1891:23:144;;;;;1869:52;1927:19;1949:7;1955:1;1949:3;:7;:::i;:::-;1927:29;;1963:19;1991:1;1985:3;:7;:21;;2005:1;1985:21;;;1995:7;2001:1;1995:3;:7;:::i;:::-;1963:43;-1:-1:-1;2013:21:144;2037:23;239:8;2037:4;:23;:::i;:::-;2013:47;-1:-1:-1;2067:20:144;2090:35;2013:47;;2090:20;:35::i;:::-;2067:58;-1:-1:-1;2131:22:144;2156:34;2067:58;2176:13;2156:19;:34::i;:::-;2131:59;-1:-1:-1;2197:18:144;2259:1;2242:12;2219:19;2226:11;2219:3;:19;:::i;:::-;:36;;;;:::i;:::-;2218:42;;;;:::i;:::-;2197:63;-1:-1:-1;2266:17:144;2345:1;2326:14;2310:11;2287:19;2294:11;2287:3;:19;:::i;:::-;:35;;;;:::i;:::-;:54;;;;:::i;:::-;2286:60;;;;:::i;:::-;2266:80;-1:-1:-1;2266:80:144;2406:10;2380:21;2397:3;2380:13;:21;:::i;:::-;2360:42;;524:4:146;2360:42:144;:::i;:::-;:57;;;;:::i;:::-;:71;;;;:::i;:::-;2353:78;1609:827;-1:-1:-1;;;;;;;;;;;;1609:827:144:o;2267:159:23:-;5363:13:18;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:18;;;;;;;:::i;:::-;2379:5:23::1;:13;2387:5:::0;2379;:13:::1;:::i;:::-;-1:-1:-1::0;2402:7:23::1;:17;2412:7:::0;2402;:17:::1;:::i;:::-;;2267:159:::0;;:::o;8904:535::-;-1:-1:-1;;;;;8987:21:23;;8979:65;;;;-1:-1:-1;;;8979:65:23;;15114:2:187;8979:65:23;;;15096:21:187;15153:2;15133:18;;;15126:30;15192:33;15172:18;;;15165:61;15243:18;;8979:65:23;14912:355:187;8979:65:23;9131:6;9115:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;9283:18:23;;;;;;:9;:18;;;;;;;;:28;;;;;;9336:37;1461:25:187;;;-1:-1:-1;;;;;;;;;;;9336:37:23;1434:18:187;9336:37:23;;;;;;;2114:147;;:::o;9759:659::-;-1:-1:-1;;;;;9842:21:23;;9834:67;;;;-1:-1:-1;;;9834:67:23;;15474:2:187;9834:67:23;;;15456:21:187;15513:2;15493:18;;;15486:30;15552:34;15532:18;;;15525:62;-1:-1:-1;;;15603:18:187;;;15596:31;15644:19;;9834:67:23;15272:397:187;9834:67:23;-1:-1:-1;;;;;9997:18:23;;9972:22;9997:18;;;:9;:18;;;;;;10033:24;;;;10025:71;;;;-1:-1:-1;;;10025:71:23;;15876:2:187;10025:71:23;;;15858:21:187;15915:2;15895:18;;;15888:30;15954:34;15934:18;;;15927:62;-1:-1:-1;;;16005:18:187;;;15998:32;16047:19;;10025:71:23;15674:398:187;10025:71:23;-1:-1:-1;;;;;10130:18:23;;;;;;:9;:18;;;;;;;;10151:23;;;10130:44;;10267:12;:22;;;;;;;10315:37;1461:25:187;;;10130:18:23;;;-1:-1:-1;;;;;;;;;;;10315:37:23;1434:18:187;10315:37:23;;;;;;;2402:17:::1;2267:159:::0;;:::o;14:423:187:-;56:3;94:5;88:12;121:6;116:3;109:19;146:1;156:162;170:6;167:1;164:13;156:162;;;232:4;288:13;;;284:22;;278:29;260:11;;;256:20;;249:59;185:12;156:162;;;160:3;363:1;356:4;347:6;342:3;338:16;334:27;327:38;426:4;419:2;415:7;410:2;402:6;398:15;394:29;389:3;385:39;381:50;374:57;;;14:423;;;;:::o;442:220::-;591:2;580:9;573:21;554:4;611:45;652:2;641:9;637:18;629:6;611:45;:::i;667:131::-;-1:-1:-1;;;;;742:31:187;;732:42;;722:70;;788:1;785;778:12;722:70;667:131;:::o;803:315::-;871:6;879;932:2;920:9;911:7;907:23;903:32;900:52;;;948:1;945;938:12;900:52;987:9;974:23;1006:31;1031:5;1006:31;:::i;:::-;1056:5;1108:2;1093:18;;;;1080:32;;-1:-1:-1;;;803:315:187:o;1740:127::-;1801:10;1796:3;1792:20;1789:1;1782:31;1832:4;1829:1;1822:15;1856:4;1853:1;1846:15;1872:719;1915:5;1968:3;1961:4;1953:6;1949:17;1945:27;1935:55;;1986:1;1983;1976:12;1935:55;2022:6;2009:20;2048:18;2085:2;2081;2078:10;2075:36;;;2091:18;;:::i;:::-;2166:2;2160:9;2134:2;2220:13;;-1:-1:-1;;2216:22:187;;;2240:2;2212:31;2208:40;2196:53;;;2264:18;;;2284:22;;;2261:46;2258:72;;;2310:18;;:::i;:::-;2350:10;2346:2;2339:22;2385:2;2377:6;2370:18;2431:3;2424:4;2419:2;2411:6;2407:15;2403:26;2400:35;2397:55;;;2448:1;2445;2438:12;2397:55;2512:2;2505:4;2497:6;2493:17;2486:4;2478:6;2474:17;2461:54;2559:1;2552:4;2547:2;2539:6;2535:15;2531:26;2524:37;2579:6;2570:15;;;;;;1872:719;;;;:::o;2596:1266::-;2736:6;2744;2752;2760;2768;2776;2784;2792;2845:3;2833:9;2824:7;2820:23;2816:33;2813:53;;;2862:1;2859;2852:12;2813:53;2901:9;2888:23;2920:31;2945:5;2920:31;:::i;:::-;2970:5;-1:-1:-1;3027:2:187;3012:18;;2999:32;3040:33;2999:32;3040:33;:::i;:::-;3092:7;-1:-1:-1;3151:2:187;3136:18;;3123:32;3164:33;3123:32;3164:33;:::i;:::-;3216:7;-1:-1:-1;3270:2:187;3255:18;;3242:32;;-1:-1:-1;3321:3:187;3306:19;;3293:33;;-1:-1:-1;3378:3:187;3363:19;;3350:33;3427:4;3414:18;;3402:31;;3392:59;;3447:1;3444;3437:12;3392:59;3470:7;-1:-1:-1;3528:3:187;3513:19;;3500:33;3552:18;3582:14;;;3579:34;;;3609:1;3606;3599:12;3579:34;3632:50;3674:7;3665:6;3654:9;3650:22;3632:50;:::i;:::-;3622:60;;3735:3;3724:9;3720:19;3707:33;3691:49;;3765:2;3755:8;3752:16;3749:36;;;3781:1;3778;3771:12;3749:36;;3804:52;3848:7;3837:8;3826:9;3822:24;3804:52;:::i;:::-;3794:62;;;2596:1266;;;;;;;;;;;:::o;3867:456::-;3944:6;3952;3960;4013:2;4001:9;3992:7;3988:23;3984:32;3981:52;;;4029:1;4026;4019:12;3981:52;4068:9;4055:23;4087:31;4112:5;4087:31;:::i;:::-;4137:5;-1:-1:-1;4194:2:187;4179:18;;4166:32;4207:33;4166:32;4207:33;:::i;:::-;3867:456;;4259:7;;-1:-1:-1;;;4313:2:187;4298:18;;;;4285:32;;3867:456::o;4517:388::-;4585:6;4593;4646:2;4634:9;4625:7;4621:23;4617:32;4614:52;;;4662:1;4659;4652:12;4614:52;4701:9;4688:23;4720:31;4745:5;4720:31;:::i;:::-;4770:5;-1:-1:-1;4827:2:187;4812:18;;4799:32;4840:33;4799:32;4840:33;:::i;:::-;4892:7;4882:17;;;4517:388;;;;;:::o;4910:247::-;4969:6;5022:2;5010:9;5001:7;4997:23;4993:32;4990:52;;;5038:1;5035;5028:12;4990:52;5077:9;5064:23;5096:31;5121:5;5096:31;:::i;6212:525::-;6298:6;6306;6314;6322;6375:3;6363:9;6354:7;6350:23;6346:33;6343:53;;;6392:1;6389;6382:12;6343:53;6431:9;6418:23;6450:31;6475:5;6450:31;:::i;:::-;6500:5;-1:-1:-1;6557:2:187;6542:18;;6529:32;6570:33;6529:32;6570:33;:::i;:::-;6212:525;;6622:7;;-1:-1:-1;;;;6676:2:187;6661:18;;6648:32;;6727:2;6712:18;6699:32;;6212:525::o;6995:380::-;7074:1;7070:12;;;;7117;;;7138:61;;7192:4;7184:6;7180:17;7170:27;;7138:61;7245:2;7237:6;7234:14;7214:18;7211:38;7208:161;;7291:10;7286:3;7282:20;7279:1;7272:31;7326:4;7323:1;7316:15;7354:4;7351:1;7344:15;7208:161;;6995:380;;;:::o;8146:560::-;-1:-1:-1;;;;;8395:32:187;;8377:51;;8476:4;8464:17;;8459:2;8444:18;;8437:45;8518:3;8513:2;8498:18;;8491:31;;;-1:-1:-1;;8545:46:187;;8571:19;;8563:6;8545:46;:::i;:::-;8639:9;8631:6;8627:22;8622:2;8611:9;8607:18;8600:50;8667:33;8693:6;8685;8667:33;:::i;:::-;8659:41;8146:560;-1:-1:-1;;;;;;;8146:560:187:o;10621:251::-;10691:6;10744:2;10732:9;10723:7;10719:23;10715:32;10712:52;;;10760:1;10757;10750:12;10712:52;10792:9;10786:16;10811:31;10836:5;10811:31;:::i;11156:127::-;11217:10;11212:3;11208:20;11205:1;11198:31;11248:4;11245:1;11238:15;11272:4;11269:1;11262:15;11288:128;11355:9;;;11376:11;;;11373:37;;;11390:18;;:::i;11421:168::-;11461:7;11527:1;11523;11519:6;11515:14;11512:1;11509:21;11504:1;11497:9;11490:17;11486:45;11483:71;;;11534:18;;:::i;:::-;-1:-1:-1;11574:9:187;;11421:168::o;11594:217::-;11634:1;11660;11650:132;;11704:10;11699:3;11695:20;11692:1;11685:31;11739:4;11736:1;11729:15;11767:4;11764:1;11757:15;11650:132;-1:-1:-1;11796:9:187;;11594:217::o;11816:125::-;11881:9;;;11902:10;;;11899:36;;;11915:18;;:::i;12296:407::-;12498:2;12480:21;;;12537:2;12517:18;;;12510:30;12576:34;12571:2;12556:18;;12549:62;-1:-1:-1;;;12642:2:187;12627:18;;12620:41;12693:3;12678:19;;12296:407::o;12834:545::-;12936:2;12931:3;12928:11;12925:448;;;12972:1;12997:5;12993:2;12986:17;13042:4;13038:2;13028:19;13112:2;13100:10;13096:19;13093:1;13089:27;13083:4;13079:38;13148:4;13136:10;13133:20;13130:47;;;-1:-1:-1;13171:4:187;13130:47;13226:2;13221:3;13217:12;13214:1;13210:20;13204:4;13200:31;13190:41;;13281:82;13299:2;13292:5;13289:13;13281:82;;;13344:17;;;13325:1;13314:13;13281:82;;;13285:3;;;12834:545;;;:::o;13555:1352::-;13681:3;13675:10;13708:18;13700:6;13697:30;13694:56;;;13730:18;;:::i;:::-;13759:97;13849:6;13809:38;13841:4;13835:11;13809:38;:::i;:::-;13803:4;13759:97;:::i;:::-;13911:4;;13975:2;13964:14;;13992:1;13987:663;;;;14694:1;14711:6;14708:89;;;-1:-1:-1;14763:19:187;;;14757:26;14708:89;-1:-1:-1;;13512:1:187;13508:11;;;13504:24;13500:29;13490:40;13536:1;13532:11;;;13487:57;14810:81;;13957:944;;13987:663;12781:1;12774:14;;;12818:4;12805:18;;-1:-1:-1;;14023:20:187;;;14141:236;14155:7;14152:1;14149:14;14141:236;;;14244:19;;;14238:26;14223:42;;14336:27;;;;14304:1;14292:14;;;;14171:19;;14141:236;;;14145:3;14405:6;14396:7;14393:19;14390:201;;;14466:19;;;14460:26;-1:-1:-1;;14549:1:187;14545:14;;;14561:3;14541:24;14537:37;14533:42;14518:58;14503:74;;14390:201;-1:-1:-1;;;;;14637:1:187;14621:14;;;14617:22;14604:36;;-1:-1:-1;13555:1352:187:o",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "POOL()": "7535d246",
    "UNDERLYING_ASSET_ADDRESS()": "b16a19de",
    "allowance(address,address)": "dd62ed3e",
    "approve(address,uint256)": "095ea7b3",
    "approveDelegation(address,uint256)": "c04a8a10",
    "balanceOf(address)": "70a08231",
    "borrowAllowance(address,address)": "6bd76d24",
    "burn(address,uint256)": "9dc29fac",
    "decimals()": "313ce567",
    "decreaseAllowance(address,uint256)": "a457c2d7",
    "getAverageStableRate()": "90f6fcf2",
    "getPoolIncentivesController()": "19ef9268",
    "getSupplyData()": "79774338",
    "getTotalSupplyAndAvgRate()": "f731e9be",
    "getTotalSupplyLastUpdated()": "e7484890",
    "getUserLastUpdated(address)": "79ce6b8c",
    "getUserStableRate(address)": "e78c9b3b",
    "increaseAllowance(address,uint256)": "39509351",
    "initialize(address,address,address,uint256,uint256,uint8,string,string)": "1e5fa51f",
    "mint(address,address,uint256,uint256)": "b3f1c93d",
    "name()": "06fdde03",
    "principalBalanceOf(address)": "c634dfaa",
    "symbol()": "95d89b41",
    "totalSupply()": "18160ddd",
    "transfer(address,uint256)": "a9059cbb",
    "transferFrom(address,address,uint256)": "23b872dd"
  },
  "rawMetadata": "{\"compiler\":{\"version\":\"0.8.16+commit.07a7930e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromUser\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toUser\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BorrowAllowanceDelegated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"currentBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"avgStableRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newTotalSupply\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"underlyingCollateral\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"debtTokenDecimals\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"debtTokenName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"debtTokenSymbol\",\"type\":\"string\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"currentBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"avgStableRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newTotalSupply\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"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\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"POOL\",\"outputs\":[{\"internalType\":\"contract ILendingPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNDERLYING_ASSET_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approveDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fromUser\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"toUser\",\"type\":\"address\"}],\"name\":\"borrowAllowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAverageStableRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolIncentivesController\",\"outputs\":[{\"internalType\":\"contract IPoolIncentivesController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSupplyData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalSupplyAndAvgRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalSupplyLastUpdated\",\"outputs\":[{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserLastUpdated\",\"outputs\":[{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserStableRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addressProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingCollateral\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"underlyingMaxTokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"underlyingMinTokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"debtTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"debtTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"debtTokenSymbol\",\"type\":\"string\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"principalBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"FluidNFT\",\"details\":\"Debt tokens are non-transferable and so diverge from the ERC20 standard.\",\"kind\":\"dev\",\"methods\":{\"POOL()\":{\"details\":\"Returns the address of the lending pool where this aToken is used*\"},\"UNDERLYING_ASSET_ADDRESS()\":{\"details\":\"Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)*\"},\"approveDelegation(address,uint256)\":{\"details\":\"delegates borrowing power to a user on the specific debt token\",\"params\":{\"amount\":\"the maximum amount being delegated. Delegation will still respect the liquidation constraints (even if delegated, a delegatee cannot force a delegator HF to go below 1)*\",\"delegatee\":\"the address receiving the delegated borrowing power\"}},\"balanceOf(address)\":{\"details\":\"Calculates the current user debt balance\",\"returns\":{\"_0\":\"The accumulated debt of the user*\"}},\"borrowAllowance(address,address)\":{\"details\":\"returns the borrow allowance of the user\",\"params\":{\"fromUser\":\"The user to giving allowance\",\"toUser\":\"The user to give allowance to\"},\"returns\":{\"_0\":\"the current allowance of toUser*\"}},\"burn(address,uint256)\":{\"details\":\"Burns debt of `user`\",\"params\":{\"amount\":\"The amount of debt tokens getting burned*\",\"user\":\"The address of the user getting his debt burned\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"decimals()\":{\"details\":\"Returns the decimals of the token.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"getAverageStableRate()\":{\"details\":\"Returns the average stable rate across all the stable rate debt\",\"returns\":{\"_0\":\"the average stable rate*\"}},\"getPoolIncentivesController()\":{\"details\":\"Returns the address of the incentives controller contract*\"},\"getSupplyData()\":{\"details\":\"Returns the principal and total supply, the average borrow rate and the last supply update timestamp*\"},\"getTotalSupplyAndAvgRate()\":{\"details\":\"Returns the the total supply and the average stable rate*\"},\"getTotalSupplyLastUpdated()\":{\"details\":\"Returns the timestamp at which the total supply was updated*\"},\"getUserLastUpdated(address)\":{\"details\":\"Returns the timestamp of the last user action\",\"returns\":{\"_0\":\"The last update timestamp*\"}},\"getUserStableRate(address)\":{\"details\":\"Returns the stable rate of the user\",\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The stable rate of user*\"}},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"initialize(address,address,address,uint256,uint256,uint8,string,string)\":{\"details\":\"Initializes the debt token.\",\"params\":{\"addressProvider\":\"The address provider \",\"debtTokenDecimals\":\"The decimals of the debtToken, same as the underlying asset's\",\"debtTokenName\":\"The name of the token\",\"debtTokenSymbol\":\"The symbol of the token\",\"underlyingAsset\":\"The address of the underlying asset of this debtToken\",\"underlyingCollateral\":\"The address of the underlying collateral of this debtToken\",\"underlyingMaxTokenId\":\"The max tokenId of the underlying collateral of this debtToken\",\"underlyingMinTokenId\":\"The min tokenId of the underlying collateral of this debtToken\"}},\"mint(address,address,uint256,uint256)\":{\"details\":\"Mints debt token to the `onBehalfOf` address. -  Only callable by the LendingPool - The resulting rate is the weighted average between the rate of the new debt and the rate of the previous debt\",\"params\":{\"amount\":\"The amount of debt tokens to mint\",\"onBehalfOf\":\"The address receiving the debt tokens\",\"rate\":\"The rate of the debt being minted*\",\"user\":\"The address receiving the borrowed underlying, being the delegatee in case of credit delegate, or same as `onBehalfOf` otherwise\"}},\"name()\":{\"details\":\"Returns the name of the token.\"},\"principalBalanceOf(address)\":{\"details\":\"Returns the principal debt balance of the user from\",\"params\":{\"user\":\"The user's address\"},\"returns\":{\"_0\":\"The debt balance of the user since the last burn/mint action*\"}},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"Returns the total supply*\"},\"transfer(address,uint256)\":{\"details\":\"Being non transferrable, the debt token does not implement any of the standard ERC20 functions for transfer and allowance.*\"}},\"title\":\"StableDebtToken\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Allows for the tracking of debt for the purposes of APY calculations at a stable rate mode.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/protocol/tokenization/StableDebtToken.sol\":\"StableDebtToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@chainlink/=lib/chainlink/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":chainlink/=lib/chainlink/integration-tests/contracts/ethereum/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://899f850f7df5a270bccfb765d70069959ca1c20d3a7381c1c3bda8a3ffee1935\",\"dweb:/ipfs/QmVdnAqwyX2L3nX2HDA5WKGtVBFyH1nKE9A1k7fZnPBkhP\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol\":{\"keccak256\":\"0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c39b800e55781c0f7a644ec9cc615664dbe2f009198e537e6acaad3086ba093\",\"dweb:/ipfs/Qmaugq2wsB1ASX8Kv29NwXqYhZY8HRNqcdvmBe9UUNEq2V\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol\":{\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2\",\"dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d\",\"dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://72460c66cd1c3b1c11b863e0d8df0a1c56f37743019e468dc312c754f43e3b06\",\"dweb:/ipfs/QmPExYKiNb9PUsgktQBupPaM33kzDHxaYoVeJdLhv8s879\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol\":{\"keccak256\":\"0x0f633a0223d9a1dcccfcf38a64c9de0874dfcbfac0c6941ccf074d63a2ce0e1e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://864a40efcffdf408044c332a5aa38ec5618ed7b4eecb8f65faf45671bd6cdc65\",\"dweb:/ipfs/QmQJquTMtc6fgm5JQzGdsGpA2fqBe3MHWEdt2qzaLySMdN\"]},\"src/interfaces/IAddressProvider.sol\":{\"keccak256\":\"0x6730abfcd8770e3279dad6137bf619ab98ee8b049e6dd85d2fbe87ba6224fde8\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://9b7d1588eab025b049f858ab2f329be7fec220198d956b9b61bf0b9bddc5761a\",\"dweb:/ipfs/QmTaFkYSUfWmbpsyE2TKC1QvP6eTDggZ72ZWodBhydqt5X\"]},\"src/interfaces/ICreditDelegationToken.sol\":{\"keccak256\":\"0xd503435c6285ec39fbe57260dfa5245e8087fb336faf9a3759d345f3150247dc\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://339566f8416bbc263e4bc2de02a23fe35e232f701298d59b1c5937ab4eea3880\",\"dweb:/ipfs/QmdJyM2xuyLBZnWfQR8fUiUhvazAWsVTvD9agj2HapdmmK\"]},\"src/interfaces/IInitializableDebtToken.sol\":{\"keccak256\":\"0x29bcf86201c67f90d1620b5da4a0de05c611bf1fb15afeb6d2b30a70ec8aebca\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://e17c25e400ac37f1cd29b9cfdba2d4bc34aa6e0c705a619acf0c69f9136150d6\",\"dweb:/ipfs/QmTcNqEpq8UbZf6o6AgwJVjuNbrNbsZWfRMhQnuZArJQ6Q\"]},\"src/interfaces/ILendingPool.sol\":{\"keccak256\":\"0x345ab4285354bb5184bdd501d7c37920a711215b6f6c2db05b05d585f2454115\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://3b6264b135760dcdd59b9a3566c1305b00084922da177159a85c206ef6a91266\",\"dweb:/ipfs/QmSotEH7zF3vrEgo2gZuunWwroHgc6bw7TVRntzv7jsJn1\"]},\"src/interfaces/IPoolIncentivesController.sol\":{\"keccak256\":\"0x7cb2c32050814e6d6d962a603104facc3bb1dad15171304e3ee756648e8f9ae1\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://cf534f592706b2a61c539c03e5d1e199c15472bcfb4ee69838e5c93ba7914466\",\"dweb:/ipfs/QmPrvXhJigK1Ke51YwAWHon1Kv88WT26iD3MwzCaPDs1Kv\"]},\"src/interfaces/IScaledBalanceToken.sol\":{\"keccak256\":\"0xb6a8f00773c5f58af761573f39f6aa3649c9deec5c4e078f5e3ca78940e4eac7\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://0938c6fd92b015670a2bcf5ff971aafbc6295e07c78d1300c5e36a67002dc70c\",\"dweb:/ipfs/QmYDcxNaAAfnupwDcDN1xtQcCEXTwW1FWiaTiU3MksCQ1Z\"]},\"src/interfaces/IStableDebtToken.sol\":{\"keccak256\":\"0x964a76facf6d0ea459fd0222c5e8036efea4e9193af3851d68190052037755b4\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://6eebeccfdd76a6e7691402b699c1185df09e8fe80c94cc059bd797a2931b9d3e\",\"dweb:/ipfs/QmeRY3xnu979DmjgFZSEaNgEkWgjtj4Hjpg9gW3bMoaZ1v\"]},\"src/protocol/libraries/helpers/Errors.sol\":{\"keccak256\":\"0x490e76871922e89a13ba0bb88977be18c143fa9d0cd9afb033744a3d81479c52\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://1c409d4d1e1689d8d8f3c3e361198d20f3b6476608c5316d8e2d91f52373e8e3\",\"dweb:/ipfs/QmRZaYpxqjmBpbxb51KqswKYPSeCsU3ejbmk5E3MrMxJaM\"]},\"src/protocol/libraries/math/MathUtils.sol\":{\"keccak256\":\"0x1c856137c4ef9d713b19a65adeb47c4490bd3b8414d7f28b364625226926779f\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://15c029cd4a3becaa47c72c1f5c18986b0a3cb488d8145e0bf88ce618a3d70841\",\"dweb:/ipfs/QmSYaWpWPbEHkRCegu5edAuRS3HTwyN2mFoSKm4yfGeec9\"]},\"src/protocol/libraries/math/WadRayMath.sol\":{\"keccak256\":\"0xb29e8edc0e0e6bfead27945357c9e4a66e0c11e58ff3b87ee68ed1b5ca416735\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://d1b4377995155f32bb6c3ba558875c617fa63601c597099d3460063ac2a15d93\",\"dweb:/ipfs/QmUvCE6Q2J62sMgQCCEbQauWSYJpMiu3QCgWa6mZnEmcK2\"]},\"src/protocol/libraries/types/ConfigTypes.sol\":{\"keccak256\":\"0xa8f9b14d9adf738033fd1847b30012d0e022027614fd6c9bb31a01bc6bfb1634\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://b20c579d1b683dd5977a675c2e46adeebd56c96faa68cda9b0767edf02a5b650\",\"dweb:/ipfs/QmPULpaX2ouktArvXJxYNVPQ9vKBhEeCYA4smo8v57qFLD\"]},\"src/protocol/libraries/types/DataTypes.sol\":{\"keccak256\":\"0x070f7865fe84ce4c9ebd86bbe24771607fbdb4e8777510b46cb5064e4d9b90a3\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://504fd0c937cc69cc0737c4ef5dcec477017ccbff609b45b210274fd7bf0792cf\",\"dweb:/ipfs/QmeW1TkAHib7XRBVmgMRTdmsa4Rg9HVToTMnifEE1C7mTi\"]},\"src/protocol/tokenization/StableDebtToken.sol\":{\"keccak256\":\"0x101a2f883130cd5b551f4d0e815ed7e911a1c8f35d884e2d2c4148263fc6eb81\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://6406cd3edbeb703adb79752a81080ccbd87fb93394b654685cd7aad529772ba1\",\"dweb:/ipfs/QmZxvjR5oTe6jWqyuTyiiKRpSiz6nhFoRvuVEZZwbBiHCS\"]},\"src/protocol/tokenization/base/DebtTokenBase.sol\":{\"keccak256\":\"0x7a3cc782fbb4308dc2981007d00d94a507da3185db59628f209116af4e31f342\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://a709ab96e62f86169fa36f760df6cfe9db532f5ce0b95e9437cdc93ec86273dc\",\"dweb:/ipfs/QmXJ8az9pqhhp4XSufsPTA1bhz5KHGDdFsm53itWrhi3gJ\"]},\"src/protocol/tokenization/base/IncentivizedERC20.sol\":{\"keccak256\":\"0xeef558a6fb8826dd7eff89e1eb24072b5533825cbbfd3ee950623bb433ecabc6\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://4453844f67a9d9339dda3d5081073188d45b8fd274aea524b239e3462ef67236\",\"dweb:/ipfs/QmVxGsuhu1NGFd5WqnGZns8pY1VEUALhMUTx76x6hxhkn8\"]}},\"version\":1}",
  "metadata": {
    "compiler": {
      "version": "0.8.16+commit.07a7930e"
    },
    "language": "Solidity",
    "output": {
      "abi": [
        {
          "inputs": [],
          "stateMutability": "nonpayable",
          "type": "constructor"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "spender",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Approval",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "fromUser",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "toUser",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "asset",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "BorrowAllowanceDelegated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "user",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "currentBalance",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "balanceIncrease",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "avgStableRate",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "newTotalSupply",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Burn",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint8",
              "name": "version",
              "type": "uint8",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Initialized",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "underlyingCollateral",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "underlyingAsset",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "pool",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "incentivesController",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "uint8",
              "name": "debtTokenDecimals",
              "type": "uint8",
              "indexed": false
            },
            {
              "internalType": "string",
              "name": "debtTokenName",
              "type": "string",
              "indexed": false
            },
            {
              "internalType": "string",
              "name": "debtTokenSymbol",
              "type": "string",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Initialized",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "user",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "onBehalfOf",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "currentBalance",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "balanceIncrease",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "newRate",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "avgStableRate",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "newTotalSupply",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Mint",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "from",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Transfer",
          "anonymous": false
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "POOL",
          "outputs": [
            {
              "internalType": "contract ILendingPool",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "UNDERLYING_ASSET_ADDRESS",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "spender",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "allowance",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "spender",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "approve",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "delegatee",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "approveDelegation"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "account",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "balanceOf",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "fromUser",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "toUser",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "borrowAllowance",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "user",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "burn"
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "decimals",
          "outputs": [
            {
              "internalType": "uint8",
              "name": "",
              "type": "uint8"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "spender",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "subtractedValue",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "decreaseAllowance",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getAverageStableRate",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getPoolIncentivesController",
          "outputs": [
            {
              "internalType": "contract IPoolIncentivesController",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getSupplyData",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            },
            {
              "internalType": "uint40",
              "name": "",
              "type": "uint40"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getTotalSupplyAndAvgRate",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getTotalSupplyLastUpdated",
          "outputs": [
            {
              "internalType": "uint40",
              "name": "",
              "type": "uint40"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "user",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getUserLastUpdated",
          "outputs": [
            {
              "internalType": "uint40",
              "name": "",
              "type": "uint40"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "user",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getUserStableRate",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "spender",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "addedValue",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "increaseAllowance",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "addressProvider",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "underlyingCollateral",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "underlyingAsset",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "underlyingMaxTokenId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "underlyingMinTokenId",
              "type": "uint256"
            },
            {
              "internalType": "uint8",
              "name": "debtTokenDecimals",
              "type": "uint8"
            },
            {
              "internalType": "string",
              "name": "debtTokenName",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "debtTokenSymbol",
              "type": "string"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "initialize"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "user",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "onBehalfOf",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "rate",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "mint",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "name",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "user",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "principalBalanceOf",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "symbol",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "totalSupply",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "transfer",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "sender",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "transferFrom",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        }
      ],
      "devdoc": {
        "kind": "dev",
        "methods": {
          "POOL()": {
            "details": "Returns the address of the lending pool where this aToken is used*"
          },
          "UNDERLYING_ASSET_ADDRESS()": {
            "details": "Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)*"
          },
          "approveDelegation(address,uint256)": {
            "details": "delegates borrowing power to a user on the specific debt token",
            "params": {
              "amount": "the maximum amount being delegated. Delegation will still respect the liquidation constraints (even if delegated, a delegatee cannot force a delegator HF to go below 1)*",
              "delegatee": "the address receiving the delegated borrowing power"
            }
          },
          "balanceOf(address)": {
            "details": "Calculates the current user debt balance",
            "returns": {
              "_0": "The accumulated debt of the user*"
            }
          },
          "borrowAllowance(address,address)": {
            "details": "returns the borrow allowance of the user",
            "params": {
              "fromUser": "The user to giving allowance",
              "toUser": "The user to give allowance to"
            },
            "returns": {
              "_0": "the current allowance of toUser*"
            }
          },
          "burn(address,uint256)": {
            "details": "Burns debt of `user`",
            "params": {
              "amount": "The amount of debt tokens getting burned*",
              "user": "The address of the user getting his debt burned"
            }
          },
          "constructor": {
            "custom:oz-upgrades-unsafe-allow": "constructor"
          },
          "decimals()": {
            "details": "Returns the decimals of the token."
          },
          "decreaseAllowance(address,uint256)": {
            "details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."
          },
          "getAverageStableRate()": {
            "details": "Returns the average stable rate across all the stable rate debt",
            "returns": {
              "_0": "the average stable rate*"
            }
          },
          "getPoolIncentivesController()": {
            "details": "Returns the address of the incentives controller contract*"
          },
          "getSupplyData()": {
            "details": "Returns the principal and total supply, the average borrow rate and the last supply update timestamp*"
          },
          "getTotalSupplyAndAvgRate()": {
            "details": "Returns the the total supply and the average stable rate*"
          },
          "getTotalSupplyLastUpdated()": {
            "details": "Returns the timestamp at which the total supply was updated*"
          },
          "getUserLastUpdated(address)": {
            "details": "Returns the timestamp of the last user action",
            "returns": {
              "_0": "The last update timestamp*"
            }
          },
          "getUserStableRate(address)": {
            "details": "Returns the stable rate of the user",
            "params": {
              "user": "The address of the user"
            },
            "returns": {
              "_0": "The stable rate of user*"
            }
          },
          "increaseAllowance(address,uint256)": {
            "details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address."
          },
          "initialize(address,address,address,uint256,uint256,uint8,string,string)": {
            "details": "Initializes the debt token.",
            "params": {
              "addressProvider": "The address provider ",
              "debtTokenDecimals": "The decimals of the debtToken, same as the underlying asset's",
              "debtTokenName": "The name of the token",
              "debtTokenSymbol": "The symbol of the token",
              "underlyingAsset": "The address of the underlying asset of this debtToken",
              "underlyingCollateral": "The address of the underlying collateral of this debtToken",
              "underlyingMaxTokenId": "The max tokenId of the underlying collateral of this debtToken",
              "underlyingMinTokenId": "The min tokenId of the underlying collateral of this debtToken"
            }
          },
          "mint(address,address,uint256,uint256)": {
            "details": "Mints debt token to the `onBehalfOf` address. -  Only callable by the LendingPool - The resulting rate is the weighted average between the rate of the new debt and the rate of the previous debt",
            "params": {
              "amount": "The amount of debt tokens to mint",
              "onBehalfOf": "The address receiving the debt tokens",
              "rate": "The rate of the debt being minted*",
              "user": "The address receiving the borrowed underlying, being the delegatee in case of credit delegate, or same as `onBehalfOf` otherwise"
            }
          },
          "name()": {
            "details": "Returns the name of the token."
          },
          "principalBalanceOf(address)": {
            "details": "Returns the principal debt balance of the user from",
            "params": {
              "user": "The user's address"
            },
            "returns": {
              "_0": "The debt balance of the user since the last burn/mint action*"
            }
          },
          "symbol()": {
            "details": "Returns the symbol of the token, usually a shorter version of the name."
          },
          "totalSupply()": {
            "details": "Returns the total supply*"
          },
          "transfer(address,uint256)": {
            "details": "Being non transferrable, the debt token does not implement any of the standard ERC20 functions for transfer and allowance.*"
          }
        },
        "version": 1
      },
      "userdoc": {
        "kind": "user",
        "methods": {},
        "version": 1
      }
    },
    "settings": {
      "remappings": [
        ":@chainlink/=lib/chainlink/",
        ":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
        ":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
        ":chainlink/=lib/chainlink/integration-tests/contracts/ethereum/src/",
        ":ds-test/=lib/forge-std/lib/ds-test/src/",
        ":forge-std/=lib/forge-std/src/"
      ],
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "metadata": {
        "bytecodeHash": "ipfs"
      },
      "compilationTarget": {
        "src/protocol/tokenization/StableDebtToken.sol": "StableDebtToken"
      },
      "libraries": {}
    },
    "sources": {
      "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": {
        "keccak256": "0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27",
        "urls": [
          "bzz-raw://899f850f7df5a270bccfb765d70069959ca1c20d3a7381c1c3bda8a3ffee1935",
          "dweb:/ipfs/QmVdnAqwyX2L3nX2HDA5WKGtVBFyH1nKE9A1k7fZnPBkhP"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol": {
        "keccak256": "0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42",
        "urls": [
          "bzz-raw://7c39b800e55781c0f7a644ec9cc615664dbe2f009198e537e6acaad3086ba093",
          "dweb:/ipfs/Qmaugq2wsB1ASX8Kv29NwXqYhZY8HRNqcdvmBe9UUNEq2V"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": {
        "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff",
        "urls": [
          "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2",
          "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol": {
        "keccak256": "0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb",
        "urls": [
          "bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d",
          "dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": {
        "keccak256": "0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183",
        "urls": [
          "bzz-raw://72460c66cd1c3b1c11b863e0d8df0a1c56f37743019e468dc312c754f43e3b06",
          "dweb:/ipfs/QmPExYKiNb9PUsgktQBupPaM33kzDHxaYoVeJdLhv8s879"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": {
        "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149",
        "urls": [
          "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c",
          "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol": {
        "keccak256": "0x0f633a0223d9a1dcccfcf38a64c9de0874dfcbfac0c6941ccf074d63a2ce0e1e",
        "urls": [
          "bzz-raw://864a40efcffdf408044c332a5aa38ec5618ed7b4eecb8f65faf45671bd6cdc65",
          "dweb:/ipfs/QmQJquTMtc6fgm5JQzGdsGpA2fqBe3MHWEdt2qzaLySMdN"
        ],
        "license": "MIT"
      },
      "src/interfaces/IAddressProvider.sol": {
        "keccak256": "0x6730abfcd8770e3279dad6137bf619ab98ee8b049e6dd85d2fbe87ba6224fde8",
        "urls": [
          "bzz-raw://9b7d1588eab025b049f858ab2f329be7fec220198d956b9b61bf0b9bddc5761a",
          "dweb:/ipfs/QmTaFkYSUfWmbpsyE2TKC1QvP6eTDggZ72ZWodBhydqt5X"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/ICreditDelegationToken.sol": {
        "keccak256": "0xd503435c6285ec39fbe57260dfa5245e8087fb336faf9a3759d345f3150247dc",
        "urls": [
          "bzz-raw://339566f8416bbc263e4bc2de02a23fe35e232f701298d59b1c5937ab4eea3880",
          "dweb:/ipfs/QmdJyM2xuyLBZnWfQR8fUiUhvazAWsVTvD9agj2HapdmmK"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/IInitializableDebtToken.sol": {
        "keccak256": "0x29bcf86201c67f90d1620b5da4a0de05c611bf1fb15afeb6d2b30a70ec8aebca",
        "urls": [
          "bzz-raw://e17c25e400ac37f1cd29b9cfdba2d4bc34aa6e0c705a619acf0c69f9136150d6",
          "dweb:/ipfs/QmTcNqEpq8UbZf6o6AgwJVjuNbrNbsZWfRMhQnuZArJQ6Q"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/ILendingPool.sol": {
        "keccak256": "0x345ab4285354bb5184bdd501d7c37920a711215b6f6c2db05b05d585f2454115",
        "urls": [
          "bzz-raw://3b6264b135760dcdd59b9a3566c1305b00084922da177159a85c206ef6a91266",
          "dweb:/ipfs/QmSotEH7zF3vrEgo2gZuunWwroHgc6bw7TVRntzv7jsJn1"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/IPoolIncentivesController.sol": {
        "keccak256": "0x7cb2c32050814e6d6d962a603104facc3bb1dad15171304e3ee756648e8f9ae1",
        "urls": [
          "bzz-raw://cf534f592706b2a61c539c03e5d1e199c15472bcfb4ee69838e5c93ba7914466",
          "dweb:/ipfs/QmPrvXhJigK1Ke51YwAWHon1Kv88WT26iD3MwzCaPDs1Kv"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/IScaledBalanceToken.sol": {
        "keccak256": "0xb6a8f00773c5f58af761573f39f6aa3649c9deec5c4e078f5e3ca78940e4eac7",
        "urls": [
          "bzz-raw://0938c6fd92b015670a2bcf5ff971aafbc6295e07c78d1300c5e36a67002dc70c",
          "dweb:/ipfs/QmYDcxNaAAfnupwDcDN1xtQcCEXTwW1FWiaTiU3MksCQ1Z"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/IStableDebtToken.sol": {
        "keccak256": "0x964a76facf6d0ea459fd0222c5e8036efea4e9193af3851d68190052037755b4",
        "urls": [
          "bzz-raw://6eebeccfdd76a6e7691402b699c1185df09e8fe80c94cc059bd797a2931b9d3e",
          "dweb:/ipfs/QmeRY3xnu979DmjgFZSEaNgEkWgjtj4Hjpg9gW3bMoaZ1v"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/helpers/Errors.sol": {
        "keccak256": "0x490e76871922e89a13ba0bb88977be18c143fa9d0cd9afb033744a3d81479c52",
        "urls": [
          "bzz-raw://1c409d4d1e1689d8d8f3c3e361198d20f3b6476608c5316d8e2d91f52373e8e3",
          "dweb:/ipfs/QmRZaYpxqjmBpbxb51KqswKYPSeCsU3ejbmk5E3MrMxJaM"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/math/MathUtils.sol": {
        "keccak256": "0x1c856137c4ef9d713b19a65adeb47c4490bd3b8414d7f28b364625226926779f",
        "urls": [
          "bzz-raw://15c029cd4a3becaa47c72c1f5c18986b0a3cb488d8145e0bf88ce618a3d70841",
          "dweb:/ipfs/QmSYaWpWPbEHkRCegu5edAuRS3HTwyN2mFoSKm4yfGeec9"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/math/WadRayMath.sol": {
        "keccak256": "0xb29e8edc0e0e6bfead27945357c9e4a66e0c11e58ff3b87ee68ed1b5ca416735",
        "urls": [
          "bzz-raw://d1b4377995155f32bb6c3ba558875c617fa63601c597099d3460063ac2a15d93",
          "dweb:/ipfs/QmUvCE6Q2J62sMgQCCEbQauWSYJpMiu3QCgWa6mZnEmcK2"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/types/ConfigTypes.sol": {
        "keccak256": "0xa8f9b14d9adf738033fd1847b30012d0e022027614fd6c9bb31a01bc6bfb1634",
        "urls": [
          "bzz-raw://b20c579d1b683dd5977a675c2e46adeebd56c96faa68cda9b0767edf02a5b650",
          "dweb:/ipfs/QmPULpaX2ouktArvXJxYNVPQ9vKBhEeCYA4smo8v57qFLD"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/types/DataTypes.sol": {
        "keccak256": "0x070f7865fe84ce4c9ebd86bbe24771607fbdb4e8777510b46cb5064e4d9b90a3",
        "urls": [
          "bzz-raw://504fd0c937cc69cc0737c4ef5dcec477017ccbff609b45b210274fd7bf0792cf",
          "dweb:/ipfs/QmeW1TkAHib7XRBVmgMRTdmsa4Rg9HVToTMnifEE1C7mTi"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/tokenization/StableDebtToken.sol": {
        "keccak256": "0x101a2f883130cd5b551f4d0e815ed7e911a1c8f35d884e2d2c4148263fc6eb81",
        "urls": [
          "bzz-raw://6406cd3edbeb703adb79752a81080ccbd87fb93394b654685cd7aad529772ba1",
          "dweb:/ipfs/QmZxvjR5oTe6jWqyuTyiiKRpSiz6nhFoRvuVEZZwbBiHCS"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/tokenization/base/DebtTokenBase.sol": {
        "keccak256": "0x7a3cc782fbb4308dc2981007d00d94a507da3185db59628f209116af4e31f342",
        "urls": [
          "bzz-raw://a709ab96e62f86169fa36f760df6cfe9db532f5ce0b95e9437cdc93ec86273dc",
          "dweb:/ipfs/QmXJ8az9pqhhp4XSufsPTA1bhz5KHGDdFsm53itWrhi3gJ"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/tokenization/base/IncentivizedERC20.sol": {
        "keccak256": "0xeef558a6fb8826dd7eff89e1eb24072b5533825cbbfd3ee950623bb433ecabc6",
        "urls": [
          "bzz-raw://4453844f67a9d9339dda3d5081073188d45b8fd274aea524b239e3462ef67236",
          "dweb:/ipfs/QmVxGsuhu1NGFd5WqnGZns8pY1VEUALhMUTx76x6hxhkn8"
        ],
        "license": "AGPL-3.0"
      }
    },
    "version": 1
  },
  "ast": {
    "absolutePath": "src/protocol/tokenization/StableDebtToken.sol",
    "id": 71314,
    "exportedSymbols": {
      "DebtTokenBase": [
        72045
      ],
      "ERC20Upgradeable": [
        27111
      ],
      "Errors": [
        57944
      ],
      "IAddressProvider": [
        46447
      ],
      "IERC20Upgradeable": [
        27189
      ],
      "ILendingPool": [
        48084
      ],
      "IPoolIncentivesController": [
        48421
      ],
      "IStableDebtToken": [
        48707
      ],
      "IncentivizedERC20": [
        72276
      ],
      "Initializable": [
        26136
      ],
      "MathUtils": [
        64132
      ],
      "SafeMath": [
        36719
      ],
      "StableDebtToken": [
        71313
      ],
      "WadRayMath": [
        64503
      ]
    },
    "nodeType": "SourceUnit",
    "src": "38:16803:160",
    "nodes": [
      {
        "id": 70329,
        "nodeType": "PragmaDirective",
        "src": "38:23:160",
        "nodes": [],
        "literals": [
          "solidity",
          "0.8",
          ".16"
        ]
      },
      {
        "id": 70331,
        "nodeType": "ImportDirective",
        "src": "65:73:160",
        "nodes": [],
        "absolutePath": "src/interfaces/IStableDebtToken.sol",
        "file": "../../interfaces/IStableDebtToken.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 71314,
        "sourceUnit": 48708,
        "symbolAliases": [
          {
            "foreign": {
              "id": 70330,
              "name": "IStableDebtToken",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 48707,
              "src": "74:16:160",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 70333,
        "nodeType": "ImportDirective",
        "src": "140:65:160",
        "nodes": [],
        "absolutePath": "src/interfaces/ILendingPool.sol",
        "file": "../../interfaces/ILendingPool.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 71314,
        "sourceUnit": 48085,
        "symbolAliases": [
          {
            "foreign": {
              "id": 70332,
              "name": "ILendingPool",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 48084,
              "src": "149:12:160",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 70335,
        "nodeType": "ImportDirective",
        "src": "207:73:160",
        "nodes": [],
        "absolutePath": "src/interfaces/IAddressProvider.sol",
        "file": "../../interfaces/IAddressProvider.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 71314,
        "sourceUnit": 46448,
        "symbolAliases": [
          {
            "foreign": {
              "id": 70334,
              "name": "IAddressProvider",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 46447,
              "src": "216:16:160",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 70337,
        "nodeType": "ImportDirective",
        "src": "282:91:160",
        "nodes": [],
        "absolutePath": "src/interfaces/IPoolIncentivesController.sol",
        "file": "../../interfaces/IPoolIncentivesController.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 71314,
        "sourceUnit": 48422,
        "symbolAliases": [
          {
            "foreign": {
              "id": 70336,
              "name": "IPoolIncentivesController",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 48421,
              "src": "291:25:160",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 70339,
        "nodeType": "ImportDirective",
        "src": "377:57:160",
        "nodes": [],
        "absolutePath": "src/protocol/tokenization/base/DebtTokenBase.sol",
        "file": "./base/DebtTokenBase.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 71314,
        "sourceUnit": 72046,
        "symbolAliases": [
          {
            "foreign": {
              "id": 70338,
              "name": "DebtTokenBase",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 72045,
              "src": "386:13:160",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 70341,
        "nodeType": "ImportDirective",
        "src": "436:65:160",
        "nodes": [],
        "absolutePath": "src/protocol/tokenization/base/IncentivizedERC20.sol",
        "file": "./base/IncentivizedERC20.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 71314,
        "sourceUnit": 72277,
        "symbolAliases": [
          {
            "foreign": {
              "id": 70340,
              "name": "IncentivizedERC20",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 72276,
              "src": "445:17:160",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 70343,
        "nodeType": "ImportDirective",
        "src": "505:60:160",
        "nodes": [],
        "absolutePath": "src/protocol/libraries/math/MathUtils.sol",
        "file": "../libraries/math/MathUtils.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 71314,
        "sourceUnit": 64133,
        "symbolAliases": [
          {
            "foreign": {
              "id": 70342,
              "name": "MathUtils",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 64132,
              "src": "514:9:160",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 70345,
        "nodeType": "ImportDirective",
        "src": "567:62:160",
        "nodes": [],
        "absolutePath": "src/protocol/libraries/math/WadRayMath.sol",
        "file": "../libraries/math/WadRayMath.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 71314,
        "sourceUnit": 64504,
        "symbolAliases": [
          {
            "foreign": {
              "id": 70344,
              "name": "WadRayMath",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 64503,
              "src": "576:10:160",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 70347,
        "nodeType": "ImportDirective",
        "src": "631:56:160",
        "nodes": [],
        "absolutePath": "src/protocol/libraries/helpers/Errors.sol",
        "file": "../libraries/helpers/Errors.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 71314,
        "sourceUnit": 57945,
        "symbolAliases": [
          {
            "foreign": {
              "id": 70346,
              "name": "Errors",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 57944,
              "src": "640:6:160",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 70349,
        "nodeType": "ImportDirective",
        "src": "691:106:160",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 71314,
        "sourceUnit": 27190,
        "symbolAliases": [
          {
            "foreign": {
              "id": 70348,
              "name": "IERC20Upgradeable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 27189,
              "src": "700:17:160",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 70351,
        "nodeType": "ImportDirective",
        "src": "799:104:160",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 71314,
        "sourceUnit": 27112,
        "symbolAliases": [
          {
            "foreign": {
              "id": 70350,
              "name": "ERC20Upgradeable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 27111,
              "src": "808:16:160",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 70353,
        "nodeType": "ImportDirective",
        "src": "905:98:160",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol",
        "file": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 71314,
        "sourceUnit": 26137,
        "symbolAliases": [
          {
            "foreign": {
              "id": 70352,
              "name": "Initializable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 26136,
              "src": "914:13:160",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 70355,
        "nodeType": "ImportDirective",
        "src": "1005:75:160",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol",
        "file": "@openzeppelin/contracts/utils/math/SafeMath.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 71314,
        "sourceUnit": 36720,
        "symbolAliases": [
          {
            "foreign": {
              "id": 70354,
              "name": "SafeMath",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 36719,
              "src": "1014:8:160",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 71313,
        "nodeType": "ContractDefinition",
        "src": "1327:15512:160",
        "nodes": [
          {
            "id": 70363,
            "nodeType": "UsingForDirective",
            "src": "1394:29:160",
            "nodes": [],
            "global": false,
            "libraryName": {
              "id": 70361,
              "name": "WadRayMath",
              "nameLocations": [
                "1400:10:160"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 64503,
              "src": "1400:10:160"
            },
            "typeName": {
              "id": 70362,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1415:7:160",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 70366,
            "nodeType": "UsingForDirective",
            "src": "1429:27:160",
            "nodes": [],
            "global": false,
            "libraryName": {
              "id": 70364,
              "name": "SafeMath",
              "nameLocations": [
                "1435:8:160"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 36719,
              "src": "1435:8:160"
            },
            "typeName": {
              "id": 70365,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1448:7:160",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 70369,
            "nodeType": "VariableDeclaration",
            "src": "1464:42:160",
            "nodes": [],
            "constant": false,
            "mutability": "mutable",
            "name": "_addressProvider",
            "nameLocation": "1490:16:160",
            "scope": 71313,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IAddressProvider_$46447",
              "typeString": "contract IAddressProvider"
            },
            "typeName": {
              "id": 70368,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 70367,
                "name": "IAddressProvider",
                "nameLocations": [
                  "1464:16:160"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 46447,
                "src": "1464:16:160"
              },
              "referencedDeclaration": 46447,
              "src": "1464:16:160",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IAddressProvider_$46447",
                "typeString": "contract IAddressProvider"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 70371,
            "nodeType": "VariableDeclaration",
            "src": "1519:38:160",
            "nodes": [],
            "constant": false,
            "mutability": "mutable",
            "name": "_underlyingCollateral",
            "nameLocation": "1536:21:160",
            "scope": 71313,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 70370,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1519:7:160",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 70373,
            "nodeType": "VariableDeclaration",
            "src": "1564:33:160",
            "nodes": [],
            "constant": false,
            "mutability": "mutable",
            "name": "_underlyingAsset",
            "nameLocation": "1581:16:160",
            "scope": 71313,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 70372,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1564:7:160",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 70375,
            "nodeType": "VariableDeclaration",
            "src": "1604:38:160",
            "nodes": [],
            "constant": false,
            "mutability": "mutable",
            "name": "_underlyingMaxTokenId",
            "nameLocation": "1621:21:160",
            "scope": 71313,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 70374,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1604:7:160",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 70377,
            "nodeType": "VariableDeclaration",
            "src": "1649:38:160",
            "nodes": [],
            "constant": false,
            "mutability": "mutable",
            "name": "_underlyingMinTokenId",
            "nameLocation": "1666:21:160",
            "scope": 71313,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 70376,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1649:7:160",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 70379,
            "nodeType": "VariableDeclaration",
            "src": "1696:31:160",
            "nodes": [],
            "constant": false,
            "mutability": "mutable",
            "name": "_avgStableRate",
            "nameLocation": "1713:14:160",
            "scope": 71313,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 70378,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1696:7:160",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 70383,
            "nodeType": "VariableDeclaration",
            "src": "1734:47:160",
            "nodes": [],
            "constant": false,
            "mutability": "mutable",
            "name": "_timestamps",
            "nameLocation": "1770:11:160",
            "scope": 71313,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint40_$",
              "typeString": "mapping(address => uint40)"
            },
            "typeName": {
              "id": 70382,
              "keyType": {
                "id": 70380,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1742:7:160",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1734:26:160",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint40_$",
                "typeString": "mapping(address => uint40)"
              },
              "valueType": {
                "id": 70381,
                "name": "uint40",
                "nodeType": "ElementaryTypeName",
                "src": "1753:6:160",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint40",
                  "typeString": "uint40"
                }
              }
            },
            "visibility": "internal"
          },
          {
            "id": 70387,
            "nodeType": "VariableDeclaration",
            "src": "1788:53:160",
            "nodes": [],
            "constant": false,
            "mutability": "mutable",
            "name": "_usersStableRate",
            "nameLocation": "1825:16:160",
            "scope": 71313,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 70386,
              "keyType": {
                "id": 70384,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1796:7:160",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1788:27:160",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 70385,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1807:7:160",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "internal"
          },
          {
            "id": 70389,
            "nodeType": "VariableDeclaration",
            "src": "1848:37:160",
            "nodes": [],
            "constant": false,
            "mutability": "mutable",
            "name": "_totalSupplyTimestamp",
            "nameLocation": "1864:21:160",
            "scope": 71313,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint40",
              "typeString": "uint40"
            },
            "typeName": {
              "id": 70388,
              "name": "uint40",
              "nodeType": "ElementaryTypeName",
              "src": "1848:6:160",
              "typeDescriptions": {
                "typeIdentifier": "t_uint40",
                "typeString": "uint40"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 70397,
            "nodeType": "FunctionDefinition",
            "src": "1948:55:160",
            "nodes": [],
            "body": {
              "id": 70396,
              "nodeType": "Block",
              "src": "1962:41:160",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 70393,
                      "name": "_disableInitializers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26117,
                      "src": "1973:20:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 70394,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1973:22:160",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 70395,
                  "nodeType": "ExpressionStatement",
                  "src": "1973:22:160"
                }
              ]
            },
            "documentation": {
              "id": 70390,
              "nodeType": "StructuredDocumentation",
              "src": "1894:48:160",
              "text": "@custom:oz-upgrades-unsafe-allow constructor"
            },
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "parameters": {
              "id": 70391,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1959:2:160"
            },
            "returnParameters": {
              "id": 70392,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1962:0:160"
            },
            "scope": 71313,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 70467,
            "nodeType": "FunctionDefinition",
            "src": "2692:1049:160",
            "nodes": [],
            "body": {
              "id": 70466,
              "nodeType": "Block",
              "src": "3080:661:160",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 70421,
                        "name": "debtTokenName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70412,
                        "src": "3116:13:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "id": 70422,
                        "name": "debtTokenSymbol",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70414,
                        "src": "3131:15:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "id": 70423,
                        "name": "debtTokenDecimals",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70410,
                        "src": "3148:17:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      ],
                      "id": 70420,
                      "name": "__IncentivizedERC20_init",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 72081,
                      "src": "3091:24:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_uint8_$returns$__$",
                        "typeString": "function (string memory,string memory,uint8)"
                      }
                    },
                    "id": 70424,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3091:75:160",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 70425,
                  "nodeType": "ExpressionStatement",
                  "src": "3091:75:160"
                },
                {
                  "expression": {
                    "id": 70430,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 70426,
                      "name": "_addressProvider",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 70369,
                      "src": "3179:16:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAddressProvider_$46447",
                        "typeString": "contract IAddressProvider"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 70428,
                          "name": "addressProvider",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 70400,
                          "src": "3215:15:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 70427,
                        "name": "IAddressProvider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 46447,
                        "src": "3198:16:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IAddressProvider_$46447_$",
                          "typeString": "type(contract IAddressProvider)"
                        }
                      },
                      "id": 70429,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3198:33:160",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAddressProvider_$46447",
                        "typeString": "contract IAddressProvider"
                      }
                    },
                    "src": "3179:52:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAddressProvider_$46447",
                      "typeString": "contract IAddressProvider"
                    }
                  },
                  "id": 70431,
                  "nodeType": "ExpressionStatement",
                  "src": "3179:52:160"
                },
                {
                  "expression": {
                    "id": 70434,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 70432,
                      "name": "_underlyingCollateral",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 70371,
                      "src": "3244:21:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 70433,
                      "name": "underlyingCollateral",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 70402,
                      "src": "3268:20:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "3244:44:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 70435,
                  "nodeType": "ExpressionStatement",
                  "src": "3244:44:160"
                },
                {
                  "expression": {
                    "id": 70438,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 70436,
                      "name": "_underlyingAsset",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 70373,
                      "src": "3299:16:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 70437,
                      "name": "underlyingAsset",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 70404,
                      "src": "3318:15:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "3299:34:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 70439,
                  "nodeType": "ExpressionStatement",
                  "src": "3299:34:160"
                },
                {
                  "expression": {
                    "id": 70442,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 70440,
                      "name": "_underlyingMaxTokenId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 70375,
                      "src": "3344:21:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 70441,
                      "name": "underlyingMaxTokenId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 70406,
                      "src": "3368:20:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3344:44:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 70443,
                  "nodeType": "ExpressionStatement",
                  "src": "3344:44:160"
                },
                {
                  "expression": {
                    "id": 70446,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 70444,
                      "name": "_underlyingMinTokenId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 70377,
                      "src": "3399:21:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 70445,
                      "name": "underlyingMinTokenId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 70408,
                      "src": "3423:20:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3399:44:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 70447,
                  "nodeType": "ExpressionStatement",
                  "src": "3399:44:160"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 70449,
                        "name": "underlyingCollateral",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70402,
                        "src": "3487:20:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 70450,
                        "name": "underlyingAsset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70404,
                        "src": "3522:15:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 70453,
                              "name": "_getLendingPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                71169
                              ],
                              "referencedDeclaration": 71169,
                              "src": "3560:15:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$48084_$",
                                "typeString": "function () view returns (contract ILendingPool)"
                              }
                            },
                            "id": 70454,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3560:17:160",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ILendingPool_$48084",
                              "typeString": "contract ILendingPool"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ILendingPool_$48084",
                              "typeString": "contract ILendingPool"
                            }
                          ],
                          "id": 70452,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3552:7:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 70451,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3552:7:160",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 70455,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3552:26:160",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 70458,
                              "name": "_getPoolIncentivesController",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                71144
                              ],
                              "referencedDeclaration": 71144,
                              "src": "3601:28:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IPoolIncentivesController_$48421_$",
                                "typeString": "function () view returns (contract IPoolIncentivesController)"
                              }
                            },
                            "id": 70459,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3601:30:160",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IPoolIncentivesController_$48421",
                              "typeString": "contract IPoolIncentivesController"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_IPoolIncentivesController_$48421",
                              "typeString": "contract IPoolIncentivesController"
                            }
                          ],
                          "id": 70457,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3593:7:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 70456,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3593:7:160",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 70460,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3593:39:160",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 70461,
                        "name": "debtTokenDecimals",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70410,
                        "src": "3647:17:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "id": 70462,
                        "name": "debtTokenName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70412,
                        "src": "3679:13:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "id": 70463,
                        "name": "debtTokenSymbol",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70414,
                        "src": "3707:15:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 70448,
                      "name": "Initialized",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        25982,
                        47473
                      ],
                      "referencedDeclaration": 47473,
                      "src": "3461:11:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint8_$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,address,address,uint8,string memory,string memory)"
                      }
                    },
                    "id": 70464,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3461:272:160",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 70465,
                  "nodeType": "EmitStatement",
                  "src": "3456:277:160"
                }
              ]
            },
            "baseFunctions": [
              48621
            ],
            "documentation": {
              "id": 70398,
              "nodeType": "StructuredDocumentation",
              "src": "2011:675:160",
              "text": " @dev Initializes the debt token.\n @param addressProvider The address provider \n @param underlyingCollateral The address of the underlying collateral of this debtToken\n @param underlyingAsset The address of the underlying asset of this debtToken\n @param underlyingMaxTokenId The max tokenId of the underlying collateral of this debtToken\n @param underlyingMinTokenId The min tokenId of the underlying collateral of this debtToken\n @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\n @param debtTokenName The name of the token\n @param debtTokenSymbol The symbol of the token"
            },
            "functionSelector": "1e5fa51f",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 70418,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 70417,
                  "name": "initializer",
                  "nameLocations": [
                    "3062:11:160"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 26038,
                  "src": "3062:11:160"
                },
                "nodeType": "ModifierInvocation",
                "src": "3062:11:160"
              }
            ],
            "name": "initialize",
            "nameLocation": "2701:10:160",
            "overrides": {
              "id": 70416,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3043:8:160"
            },
            "parameters": {
              "id": 70415,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 70400,
                  "mutability": "mutable",
                  "name": "addressProvider",
                  "nameLocation": "2730:15:160",
                  "nodeType": "VariableDeclaration",
                  "scope": 70467,
                  "src": "2722:23:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 70399,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2722:7:160",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 70402,
                  "mutability": "mutable",
                  "name": "underlyingCollateral",
                  "nameLocation": "2764:20:160",
                  "nodeType": "VariableDeclaration",
                  "scope": 70467,
                  "src": "2756:28:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 70401,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2756:7:160",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 70404,
                  "mutability": "mutable",
                  "name": "underlyingAsset",
                  "nameLocation": "2803:15:160",
                  "nodeType": "VariableDeclaration",
                  "scope": 70467,
                  "src": "2795:23:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 70403,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2795:7:160",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 70406,
                  "mutability": "mutable",
                  "name": "underlyingMaxTokenId",
                  "nameLocation": "2837:20:160",
                  "nodeType": "VariableDeclaration",
                  "scope": 70467,
                  "src": "2829:28:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 70405,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2829:7:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 70408,
                  "mutability": "mutable",
                  "name": "underlyingMinTokenId",
                  "nameLocation": "2876:20:160",
                  "nodeType": "VariableDeclaration",
                  "scope": 70467,
                  "src": "2868:28:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 70407,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2868:7:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 70410,
                  "mutability": "mutable",
                  "name": "debtTokenDecimals",
                  "nameLocation": "2913:17:160",
                  "nodeType": "VariableDeclaration",
                  "scope": 70467,
                  "src": "2907:23:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 70409,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "2907:5:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 70412,
                  "mutability": "mutable",
                  "name": "debtTokenName",
                  "nameLocation": "2955:13:160",
                  "nodeType": "VariableDeclaration",
                  "scope": 70467,
                  "src": "2941:27:160",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 70411,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2941:6:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 70414,
                  "mutability": "mutable",
                  "name": "debtTokenSymbol",
                  "nameLocation": "2993:15:160",
                  "nodeType": "VariableDeclaration",
                  "scope": 70467,
                  "src": "2979:29:160",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 70413,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2979:6:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2711:304:160"
            },
            "returnParameters": {
              "id": 70419,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3080:0:160"
            },
            "scope": 71313,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 70477,
            "nodeType": "FunctionDefinition",
            "src": "3882:121:160",
            "nodes": [],
            "body": {
              "id": 70476,
              "nodeType": "Block",
              "src": "3963:40:160",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 70474,
                    "name": "_avgStableRate",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 70379,
                    "src": "3981:14:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 70473,
                  "id": 70475,
                  "nodeType": "Return",
                  "src": "3974:21:160"
                }
              ]
            },
            "baseFunctions": [
              48649
            ],
            "documentation": {
              "id": 70468,
              "nodeType": "StructuredDocumentation",
              "src": "3749:127:160",
              "text": " @dev Returns the average stable rate across all the stable rate debt\n @return the average stable rate*"
            },
            "functionSelector": "90f6fcf2",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getAverageStableRate",
            "nameLocation": "3891:20:160",
            "overrides": {
              "id": 70470,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3936:8:160"
            },
            "parameters": {
              "id": 70469,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3911:2:160"
            },
            "returnParameters": {
              "id": 70473,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 70472,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 70477,
                  "src": "3954:7:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 70471,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3954:7:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3953:9:160"
            },
            "scope": 71313,
            "stateMutability": "view",
            "virtual": true,
            "visibility": "external"
          },
          {
            "id": 70491,
            "nodeType": "FunctionDefinition",
            "src": "4128:133:160",
            "nodes": [],
            "body": {
              "id": 70490,
              "nodeType": "Block",
              "src": "4218:43:160",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "id": 70486,
                      "name": "_timestamps",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 70383,
                      "src": "4236:11:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint40_$",
                        "typeString": "mapping(address => uint40)"
                      }
                    },
                    "id": 70488,
                    "indexExpression": {
                      "id": 70487,
                      "name": "user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 70480,
                      "src": "4248:4:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4236:17:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "functionReturnParameters": 70485,
                  "id": 70489,
                  "nodeType": "Return",
                  "src": "4229:24:160"
                }
              ]
            },
            "baseFunctions": [
              48665
            ],
            "documentation": {
              "id": 70478,
              "nodeType": "StructuredDocumentation",
              "src": "4011:111:160",
              "text": " @dev Returns the timestamp of the last user action\n @return The last update timestamp*"
            },
            "functionSelector": "79ce6b8c",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getUserLastUpdated",
            "nameLocation": "4137:18:160",
            "overrides": {
              "id": 70482,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4192:8:160"
            },
            "parameters": {
              "id": 70481,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 70480,
                  "mutability": "mutable",
                  "name": "user",
                  "nameLocation": "4164:4:160",
                  "nodeType": "VariableDeclaration",
                  "scope": 70491,
                  "src": "4156:12:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 70479,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4156:7:160",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4155:14:160"
            },
            "returnParameters": {
              "id": 70485,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 70484,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 70491,
                  "src": "4210:6:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint40",
                    "typeString": "uint40"
                  },
                  "typeName": {
                    "id": 70483,
                    "name": "uint40",
                    "nodeType": "ElementaryTypeName",
                    "src": "4210:6:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4209:8:160"
            },
            "scope": 71313,
            "stateMutability": "view",
            "virtual": true,
            "visibility": "external"
          },
          {
            "id": 70505,
            "nodeType": "FunctionDefinition",
            "src": "4417:138:160",
            "nodes": [],
            "body": {
              "id": 70504,
              "nodeType": "Block",
              "src": "4507:48:160",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "id": 70500,
                      "name": "_usersStableRate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 70387,
                      "src": "4525:16:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 70502,
                    "indexExpression": {
                      "id": 70501,
                      "name": "user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 70494,
                      "src": "4542:4:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4525:22:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 70499,
                  "id": 70503,
                  "nodeType": "Return",
                  "src": "4518:29:160"
                }
              ]
            },
            "baseFunctions": [
              48657
            ],
            "documentation": {
              "id": 70492,
              "nodeType": "StructuredDocumentation",
              "src": "4269:142:160",
              "text": " @dev Returns the stable rate of the user\n @param user The address of the user\n @return The stable rate of user*"
            },
            "functionSelector": "e78c9b3b",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getUserStableRate",
            "nameLocation": "4426:17:160",
            "overrides": {
              "id": 70496,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4480:8:160"
            },
            "parameters": {
              "id": 70495,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 70494,
                  "mutability": "mutable",
                  "name": "user",
                  "nameLocation": "4452:4:160",
                  "nodeType": "VariableDeclaration",
                  "scope": 70505,
                  "src": "4444:12:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 70493,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4444:7:160",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4443:14:160"
            },
            "returnParameters": {
              "id": 70499,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 70498,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 70505,
                  "src": "4498:7:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 70497,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4498:7:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4497:9:160"
            },
            "scope": 71313,
            "stateMutability": "view",
            "virtual": true,
            "visibility": "external"
          },
          {
            "id": 70552,
            "nodeType": "FunctionDefinition",
            "src": "4682:531:160",
            "nodes": [],
            "body": {
              "id": 70551,
              "nodeType": "Block",
              "src": "4859:354:160",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    70517
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 70517,
                      "mutability": "mutable",
                      "name": "accountBalance",
                      "nameLocation": "4878:14:160",
                      "nodeType": "VariableDeclaration",
                      "scope": 70551,
                      "src": "4870:22:160",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 70516,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4870:7:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 70522,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 70520,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70508,
                        "src": "4911:7:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 70518,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "4895:5:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_super$_StableDebtToken_$71313_$",
                          "typeString": "type(contract super StableDebtToken)"
                        }
                      },
                      "id": 70519,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4901:9:160",
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 26618,
                      "src": "4895:15:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view returns (uint256)"
                      }
                    },
                    "id": 70521,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4895:24:160",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4870:49:160"
                },
                {
                  "assignments": [
                    70524
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 70524,
                      "mutability": "mutable",
                      "name": "stableRate",
                      "nameLocation": "4938:10:160",
                      "nodeType": "VariableDeclaration",
                      "scope": 70551,
                      "src": "4930:18:160",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 70523,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4930:7:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 70528,
                  "initialValue": {
                    "baseExpression": {
                      "id": 70525,
                      "name": "_usersStableRate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 70387,
                      "src": "4951:16:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 70527,
                    "indexExpression": {
                      "id": 70526,
                      "name": "account",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 70508,
                      "src": "4968:7:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4951:25:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4930:46:160"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 70531,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 70529,
                      "name": "accountBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 70517,
                      "src": "4991:14:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 70530,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5009:1:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "4991:19:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 70535,
                  "nodeType": "IfStatement",
                  "src": "4987:60:160",
                  "trueBody": {
                    "id": 70534,
                    "nodeType": "Block",
                    "src": "5012:35:160",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30",
                          "id": 70532,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5034:1:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 70515,
                        "id": 70533,
                        "nodeType": "Return",
                        "src": "5027:8:160"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    70537
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 70537,
                      "mutability": "mutable",
                      "name": "interest",
                      "nameLocation": "5065:8:160",
                      "nodeType": "VariableDeclaration",
                      "scope": 70551,
                      "src": "5057:16:160",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 70536,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5057:7:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 70545,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 70540,
                        "name": "stableRate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70524,
                        "src": "5123:10:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "baseExpression": {
                          "id": 70541,
                          "name": "_timestamps",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 70383,
                          "src": "5135:11:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint40_$",
                            "typeString": "mapping(address => uint40)"
                          }
                        },
                        "id": 70543,
                        "indexExpression": {
                          "id": 70542,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 70508,
                          "src": "5147:7:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5135:20:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      ],
                      "expression": {
                        "id": 70538,
                        "name": "MathUtils",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 64132,
                        "src": "5089:9:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_MathUtils_$64132_$",
                          "typeString": "type(library MathUtils)"
                        }
                      },
                      "id": 70539,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5099:23:160",
                      "memberName": "calculateLinearInterest",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 63999,
                      "src": "5089:33:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint40_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint40) view returns (uint256)"
                      }
                    },
                    "id": 70544,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5089:67:160",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5057:99:160"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 70548,
                        "name": "interest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70537,
                        "src": "5196:8:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 70546,
                        "name": "accountBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70517,
                        "src": "5174:14:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 70547,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5189:6:160",
                      "memberName": "rayMul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 64384,
                      "src": "5174:21:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 70549,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5174:31:160",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 70515,
                  "id": 70550,
                  "nodeType": "Return",
                  "src": "5167:38:160"
                }
              ]
            },
            "baseFunctions": [
              26618,
              27146
            ],
            "documentation": {
              "id": 70506,
              "nodeType": "StructuredDocumentation",
              "src": "4563:113:160",
              "text": " @dev Calculates the current user debt balance\n @return The accumulated debt of the user*"
            },
            "functionSelector": "70a08231",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "balanceOf",
            "nameLocation": "4691:9:160",
            "overrides": {
              "id": 70512,
              "nodeType": "OverrideSpecifier",
              "overrides": [
                {
                  "id": 70510,
                  "name": "ERC20Upgradeable",
                  "nameLocations": [
                    "4788:16:160"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 27111,
                  "src": "4788:16:160"
                },
                {
                  "id": 70511,
                  "name": "IERC20Upgradeable",
                  "nameLocations": [
                    "4806:17:160"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 27189,
                  "src": "4806:17:160"
                }
              ],
              "src": "4778:46:160"
            },
            "parameters": {
              "id": 70509,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 70508,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "4709:7:160",
                  "nodeType": "VariableDeclaration",
                  "scope": 70552,
                  "src": "4701:15:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 70507,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4701:7:160",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4700:17:160"
            },
            "returnParameters": {
              "id": 70515,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 70514,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 70552,
                  "src": "4844:7:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 70513,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4844:7:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4843:9:160"
            },
            "scope": 71313,
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "id": 70563,
            "nodeType": "StructDefinition",
            "src": "5221:192:160",
            "nodes": [],
            "canonicalName": "StableDebtToken.MintLocalVars",
            "members": [
              {
                "constant": false,
                "id": 70554,
                "mutability": "mutable",
                "name": "previousSupply",
                "nameLocation": "5261:14:160",
                "nodeType": "VariableDeclaration",
                "scope": 70563,
                "src": "5253:22:160",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 70553,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "5253:7:160",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 70556,
                "mutability": "mutable",
                "name": "nextSupply",
                "nameLocation": "5294:10:160",
                "nodeType": "VariableDeclaration",
                "scope": 70563,
                "src": "5286:18:160",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 70555,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "5286:7:160",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 70558,
                "mutability": "mutable",
                "name": "amountInRay",
                "nameLocation": "5323:11:160",
                "nodeType": "VariableDeclaration",
                "scope": 70563,
                "src": "5315:19:160",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 70557,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "5315:7:160",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 70560,
                "mutability": "mutable",
                "name": "newStableRate",
                "nameLocation": "5353:13:160",
                "nodeType": "VariableDeclaration",
                "scope": 70563,
                "src": "5345:21:160",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 70559,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "5345:7:160",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 70562,
                "mutability": "mutable",
                "name": "currentAvgStableRate",
                "nameLocation": "5385:20:160",
                "nodeType": "VariableDeclaration",
                "scope": 70563,
                "src": "5377:28:160",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 70561,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "5377:7:160",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "MintLocalVars",
            "nameLocation": "5228:13:160",
            "scope": 71313,
            "visibility": "public"
          },
          {
            "id": 70766,
            "nodeType": "FunctionDefinition",
            "src": "5992:1938:160",
            "nodes": [],
            "body": {
              "id": 70765,
              "nodeType": "Block",
              "src": "6162:1768:160",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    70582
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 70582,
                      "mutability": "mutable",
                      "name": "vars",
                      "nameLocation": "6194:4:160",
                      "nodeType": "VariableDeclaration",
                      "scope": 70765,
                      "src": "6173:25:160",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_MintLocalVars_$70563_memory_ptr",
                        "typeString": "struct StableDebtToken.MintLocalVars"
                      },
                      "typeName": {
                        "id": 70581,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 70580,
                          "name": "MintLocalVars",
                          "nameLocations": [
                            "6173:13:160"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 70563,
                          "src": "6173:13:160"
                        },
                        "referencedDeclaration": 70563,
                        "src": "6173:13:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MintLocalVars_$70563_storage_ptr",
                          "typeString": "struct StableDebtToken.MintLocalVars"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 70583,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6173:25:160"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 70592,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 70586,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 70584,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70566,
                        "src": "6229:4:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "id": 70585,
                        "name": "onBehalfOf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70568,
                        "src": "6237:10:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "6229:18:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 70591,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 70587,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70566,
                        "src": "6264:4:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 70588,
                            "name": "_addressProvider",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 70369,
                            "src": "6272:16:160",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAddressProvider_$46447",
                              "typeString": "contract IAddressProvider"
                            }
                          },
                          "id": 70589,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "6289:14:160",
                          "memberName": "getWETHGateway",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 46441,
                          "src": "6272:31:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                            "typeString": "function () view external returns (address)"
                          }
                        },
                        "id": 70590,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6272:33:160",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "6264:41:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "6229:76:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 70600,
                  "nodeType": "IfStatement",
                  "src": "6211:179:160",
                  "trueBody": {
                    "id": 70599,
                    "nodeType": "Block",
                    "src": "6317:73:160",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 70594,
                              "name": "onBehalfOf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70568,
                              "src": "6353:10:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 70595,
                              "name": "user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70566,
                              "src": "6365:4:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 70596,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70570,
                              "src": "6371:6:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 70593,
                            "name": "_decreaseBorrowAllowance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 72032,
                            "src": "6328:24:160",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 70597,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6328:50:160",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 70598,
                        "nodeType": "ExpressionStatement",
                        "src": "6328:50:160"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    null,
                    70602,
                    70604
                  ],
                  "declarations": [
                    null,
                    {
                      "constant": false,
                      "id": 70602,
                      "mutability": "mutable",
                      "name": "currentBalance",
                      "nameLocation": "6413:14:160",
                      "nodeType": "VariableDeclaration",
                      "scope": 70765,
                      "src": "6405:22:160",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 70601,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6405:7:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 70604,
                      "mutability": "mutable",
                      "name": "balanceIncrease",
                      "nameLocation": "6437:15:160",
                      "nodeType": "VariableDeclaration",
                      "scope": 70765,
                      "src": "6429:23:160",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 70603,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6429:7:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 70608,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 70606,
                        "name": "onBehalfOf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70568,
                        "src": "6482:10:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 70605,
                      "name": "_calculateBalanceIncrease",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 71010,
                      "src": "6456:25:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$_t_uint256_$_t_uint256_$",
                        "typeString": "function (address) view returns (uint256,uint256,uint256)"
                      }
                    },
                    "id": 70607,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6456:37:160",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6402:91:160"
                },
                {
                  "expression": {
                    "id": 70614,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 70609,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70582,
                        "src": "6506:4:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MintLocalVars_$70563_memory_ptr",
                          "typeString": "struct StableDebtToken.MintLocalVars memory"
                        }
                      },
                      "id": 70611,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "6511:14:160",
                      "memberName": "previousSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 70554,
                      "src": "6506:19:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 70612,
                        "name": "totalSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          71072
                        ],
                        "referencedDeclaration": 71072,
                        "src": "6528:11:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                          "typeString": "function () view returns (uint256)"
                        }
                      },
                      "id": 70613,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6528:13:160",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6506:35:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 70615,
                  "nodeType": "ExpressionStatement",
                  "src": "6506:35:160"
                },
                {
                  "expression": {
                    "id": 70620,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 70616,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70582,
                        "src": "6552:4:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MintLocalVars_$70563_memory_ptr",
                          "typeString": "struct StableDebtToken.MintLocalVars memory"
                        }
                      },
                      "id": 70618,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "6557:20:160",
                      "memberName": "currentAvgStableRate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 70562,
                      "src": "6552:25:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 70619,
                      "name": "_avgStableRate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 70379,
                      "src": "6580:14:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6552:42:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 70621,
                  "nodeType": "ExpressionStatement",
                  "src": "6552:42:160"
                },
                {
                  "expression": {
                    "id": 70630,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 70622,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70582,
                        "src": "6605:4:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MintLocalVars_$70563_memory_ptr",
                          "typeString": "struct StableDebtToken.MintLocalVars memory"
                        }
                      },
                      "id": 70624,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "6610:10:160",
                      "memberName": "nextSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 70556,
                      "src": "6605:15:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 70628,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 70570,
                          "src": "6647:6:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "expression": {
                            "id": 70625,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 70582,
                            "src": "6623:4:160",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MintLocalVars_$70563_memory_ptr",
                              "typeString": "struct StableDebtToken.MintLocalVars memory"
                            }
                          },
                          "id": 70626,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "6628:14:160",
                          "memberName": "previousSupply",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 70554,
                          "src": "6623:19:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 70627,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "6643:3:160",
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 36583,
                        "src": "6623:23:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 70629,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6623:31:160",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6605:49:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 70631,
                  "nodeType": "ExpressionStatement",
                  "src": "6605:49:160"
                },
                {
                  "expression": {
                    "id": 70638,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 70632,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70582,
                        "src": "6667:4:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MintLocalVars_$70563_memory_ptr",
                          "typeString": "struct StableDebtToken.MintLocalVars memory"
                        }
                      },
                      "id": 70634,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "6672:11:160",
                      "memberName": "amountInRay",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 70558,
                      "src": "6667:16:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 70635,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 70570,
                          "src": "6686:6:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 70636,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "6693:8:160",
                        "memberName": "wadToRay",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 64446,
                        "src": "6686:15:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256) pure returns (uint256)"
                        }
                      },
                      "id": 70637,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6686:17:160",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6667:36:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 70639,
                  "nodeType": "ExpressionStatement",
                  "src": "6667:36:160"
                },
                {
                  "expression": {
                    "id": 70666,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 70640,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70582,
                        "src": "6716:4:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MintLocalVars_$70563_memory_ptr",
                          "typeString": "struct StableDebtToken.MintLocalVars memory"
                        }
                      },
                      "id": 70642,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "6721:13:160",
                      "memberName": "newStableRate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 70560,
                      "src": "6716:18:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 70661,
                                  "name": "amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 70570,
                                  "src": "6903:6:160",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 70659,
                                  "name": "currentBalance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 70602,
                                  "src": "6884:14:160",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 70660,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "6899:3:160",
                                "memberName": "add",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 36583,
                                "src": "6884:18:160",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 70662,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6884:26:160",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 70663,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "6911:8:160",
                            "memberName": "wadToRay",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 64446,
                            "src": "6884:35:160",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256) pure returns (uint256)"
                            }
                          },
                          "id": 70664,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6884:37:160",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 70655,
                                  "name": "rate",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 70572,
                                  "src": "6856:4:160",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "expression": {
                                    "id": 70652,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 70582,
                                    "src": "6832:4:160",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_MintLocalVars_$70563_memory_ptr",
                                      "typeString": "struct StableDebtToken.MintLocalVars memory"
                                    }
                                  },
                                  "id": 70653,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "6837:11:160",
                                  "memberName": "amountInRay",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 70558,
                                  "src": "6832:16:160",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 70654,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "6849:6:160",
                                "memberName": "rayMul",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 64384,
                                "src": "6832:23:160",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 70656,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6832:29:160",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "id": 70647,
                                      "name": "currentBalance",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 70602,
                                      "src": "6787:14:160",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 70648,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "6802:8:160",
                                    "memberName": "wadToRay",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 64446,
                                    "src": "6787:23:160",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 70649,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "6787:25:160",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "baseExpression": {
                                    "id": 70643,
                                    "name": "_usersStableRate",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 70387,
                                    "src": "6737:16:160",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 70645,
                                  "indexExpression": {
                                    "id": 70644,
                                    "name": "onBehalfOf",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 70568,
                                    "src": "6754:10:160",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "6737:28:160",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 70646,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "6780:6:160",
                                "memberName": "rayMul",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 64384,
                                "src": "6737:49:160",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 70650,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6737:76:160",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 70651,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "6828:3:160",
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 36583,
                            "src": "6737:94:160",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 70657,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6737:125:160",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 70658,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "6877:6:160",
                        "memberName": "rayDiv",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 64411,
                        "src": "6737:146:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 70665,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6737:185:160",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6716:206:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 70667,
                  "nodeType": "ExpressionStatement",
                  "src": "6716:206:160"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 70676,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 70669,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 70582,
                            "src": "6943:4:160",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_MintLocalVars_$70563_memory_ptr",
                              "typeString": "struct StableDebtToken.MintLocalVars memory"
                            }
                          },
                          "id": 70670,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "6948:13:160",
                          "memberName": "newStableRate",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 70560,
                          "src": "6943:18:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "expression": {
                            "arguments": [
                              {
                                "id": 70673,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "6970:7:160",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint128_$",
                                  "typeString": "type(uint128)"
                                },
                                "typeName": {
                                  "id": 70672,
                                  "name": "uint128",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "6970:7:160",
                                  "typeDescriptions": {}
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_type$_t_uint128_$",
                                  "typeString": "type(uint128)"
                                }
                              ],
                              "id": 70671,
                              "name": "type",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -27,
                              "src": "6965:4:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 70674,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6965:13:160",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_meta_type_t_uint128",
                              "typeString": "type(uint128)"
                            }
                          },
                          "id": 70675,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberLocation": "6979:3:160",
                          "memberName": "max",
                          "nodeType": "MemberAccess",
                          "src": "6965:17:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "src": "6943:39:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "expression": {
                          "id": 70677,
                          "name": "Errors",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 57944,
                          "src": "6984:6:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Errors_$57944_$",
                            "typeString": "type(library Errors)"
                          }
                        },
                        "id": 70678,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "6991:24:160",
                        "memberName": "LPL_STABLE_DEBT_OVERFLOW",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 57748,
                        "src": "6984:31:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 70668,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "6935:7:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 70679,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6935:81:160",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 70680,
                  "nodeType": "ExpressionStatement",
                  "src": "6935:81:160"
                },
                {
                  "expression": {
                    "id": 70686,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 70681,
                        "name": "_usersStableRate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70387,
                        "src": "7027:16:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 70683,
                      "indexExpression": {
                        "id": 70682,
                        "name": "onBehalfOf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70568,
                        "src": "7044:10:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7027:28:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 70684,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70582,
                        "src": "7058:4:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MintLocalVars_$70563_memory_ptr",
                          "typeString": "struct StableDebtToken.MintLocalVars memory"
                        }
                      },
                      "id": 70685,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "7063:13:160",
                      "memberName": "newStableRate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 70560,
                      "src": "7058:18:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7027:49:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 70687,
                  "nodeType": "ExpressionStatement",
                  "src": "7027:49:160"
                },
                {
                  "expression": {
                    "id": 70698,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 70688,
                      "name": "_totalSupplyTimestamp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 70389,
                      "src": "7125:21:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 70697,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "baseExpression": {
                          "id": 70689,
                          "name": "_timestamps",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 70383,
                          "src": "7149:11:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint40_$",
                            "typeString": "mapping(address => uint40)"
                          }
                        },
                        "id": 70691,
                        "indexExpression": {
                          "id": 70690,
                          "name": "onBehalfOf",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 70568,
                          "src": "7161:10:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": true,
                        "nodeType": "IndexAccess",
                        "src": "7149:23:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "arguments": [
                          {
                            "expression": {
                              "id": 70694,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -4,
                              "src": "7182:5:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 70695,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "7188:9:160",
                            "memberName": "timestamp",
                            "nodeType": "MemberAccess",
                            "src": "7182:15:160",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 70693,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7175:6:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint40_$",
                            "typeString": "type(uint40)"
                          },
                          "typeName": {
                            "id": 70692,
                            "name": "uint40",
                            "nodeType": "ElementaryTypeName",
                            "src": "7175:6:160",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 70696,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7175:23:160",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      },
                      "src": "7149:49:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "src": "7125:73:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "id": 70699,
                  "nodeType": "ExpressionStatement",
                  "src": "7125:73:160"
                },
                {
                  "expression": {
                    "id": 70726,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 70700,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70582,
                        "src": "7266:4:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MintLocalVars_$70563_memory_ptr",
                          "typeString": "struct StableDebtToken.MintLocalVars memory"
                        }
                      },
                      "id": 70702,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "7271:20:160",
                      "memberName": "currentAvgStableRate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 70562,
                      "src": "7266:25:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 70725,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "id": 70703,
                        "name": "_avgStableRate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70379,
                        "src": "7294:14:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "expression": {
                                  "id": 70720,
                                  "name": "vars",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 70582,
                                  "src": "7458:4:160",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_MintLocalVars_$70563_memory_ptr",
                                    "typeString": "struct StableDebtToken.MintLocalVars memory"
                                  }
                                },
                                "id": 70721,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "7463:10:160",
                                "memberName": "nextSupply",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 70556,
                                "src": "7458:15:160",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 70722,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "7474:8:160",
                              "memberName": "wadToRay",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 64446,
                              "src": "7458:24:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256) pure returns (uint256)"
                              }
                            },
                            "id": 70723,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7458:26:160",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "expression": {
                                      "id": 70715,
                                      "name": "vars",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 70582,
                                      "src": "7422:4:160",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_MintLocalVars_$70563_memory_ptr",
                                        "typeString": "struct StableDebtToken.MintLocalVars memory"
                                      }
                                    },
                                    "id": 70716,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "7427:11:160",
                                    "memberName": "amountInRay",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 70558,
                                    "src": "7422:16:160",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 70713,
                                    "name": "rate",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 70572,
                                    "src": "7410:4:160",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 70714,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "7415:6:160",
                                  "memberName": "rayMul",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 64384,
                                  "src": "7410:11:160",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 70717,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7410:29:160",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "expression": {
                                        "expression": {
                                          "id": 70707,
                                          "name": "vars",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 70582,
                                          "src": "7364:4:160",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_MintLocalVars_$70563_memory_ptr",
                                            "typeString": "struct StableDebtToken.MintLocalVars memory"
                                          }
                                        },
                                        "id": 70708,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberLocation": "7369:14:160",
                                        "memberName": "previousSupply",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 70554,
                                        "src": "7364:19:160",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 70709,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "7384:8:160",
                                      "memberName": "wadToRay",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 64446,
                                      "src": "7364:28:160",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 70710,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "7364:30:160",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "expression": {
                                      "id": 70704,
                                      "name": "vars",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 70582,
                                      "src": "7311:4:160",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_MintLocalVars_$70563_memory_ptr",
                                        "typeString": "struct StableDebtToken.MintLocalVars memory"
                                      }
                                    },
                                    "id": 70705,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "7326:20:160",
                                    "memberName": "currentAvgStableRate",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 70562,
                                    "src": "7311:35:160",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 70706,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "7357:6:160",
                                  "memberName": "rayMul",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 64384,
                                  "src": "7311:52:160",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 70711,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7311:84:160",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 70712,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "7406:3:160",
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 36583,
                              "src": "7311:98:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 70718,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7311:129:160",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 70719,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "7451:6:160",
                          "memberName": "rayDiv",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 64411,
                          "src": "7311:146:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 70724,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7311:174:160",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "7294:191:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7266:219:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 70727,
                  "nodeType": "ExpressionStatement",
                  "src": "7266:219:160"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 70729,
                        "name": "onBehalfOf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70568,
                        "src": "7504:10:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 70732,
                            "name": "balanceIncrease",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 70604,
                            "src": "7527:15:160",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 70730,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 70570,
                            "src": "7516:6:160",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 70731,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "7523:3:160",
                          "memberName": "add",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 36583,
                          "src": "7516:10:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 70733,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7516:27:160",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 70734,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 70582,
                          "src": "7545:4:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MintLocalVars_$70563_memory_ptr",
                            "typeString": "struct StableDebtToken.MintLocalVars memory"
                          }
                        },
                        "id": 70735,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "7550:14:160",
                        "memberName": "previousSupply",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 70554,
                        "src": "7545:19:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 70728,
                      "name": "_mint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        71254,
                        72226
                      ],
                      "referencedDeclaration": 71254,
                      "src": "7498:5:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256)"
                      }
                    },
                    "id": 70736,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7498:67:160",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 70737,
                  "nodeType": "ExpressionStatement",
                  "src": "7498:67:160"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 70741,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7600:1:160",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 70740,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7592:7:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 70739,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "7592:7:160",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 70742,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7592:10:160",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 70743,
                        "name": "onBehalfOf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70568,
                        "src": "7604:10:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 70744,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70570,
                        "src": "7616:6:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 70738,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27123,
                      "src": "7583:8:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 70745,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7583:40:160",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 70746,
                  "nodeType": "EmitStatement",
                  "src": "7578:45:160"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 70748,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70566,
                        "src": "7660:4:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 70749,
                        "name": "onBehalfOf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70568,
                        "src": "7679:10:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 70750,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70570,
                        "src": "7704:6:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 70751,
                        "name": "currentBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70602,
                        "src": "7725:14:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 70752,
                        "name": "balanceIncrease",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70604,
                        "src": "7754:15:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 70753,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 70582,
                          "src": "7784:4:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MintLocalVars_$70563_memory_ptr",
                            "typeString": "struct StableDebtToken.MintLocalVars memory"
                          }
                        },
                        "id": 70754,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "7789:13:160",
                        "memberName": "newStableRate",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 70560,
                        "src": "7784:18:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 70755,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 70582,
                          "src": "7817:4:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MintLocalVars_$70563_memory_ptr",
                            "typeString": "struct StableDebtToken.MintLocalVars memory"
                          }
                        },
                        "id": 70756,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "7822:20:160",
                        "memberName": "currentAvgStableRate",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 70562,
                        "src": "7817:25:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 70757,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 70582,
                          "src": "7857:4:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MintLocalVars_$70563_memory_ptr",
                            "typeString": "struct StableDebtToken.MintLocalVars memory"
                          }
                        },
                        "id": 70758,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "7862:10:160",
                        "memberName": "nextSupply",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 70556,
                        "src": "7857:15:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 70747,
                      "name": "Mint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 48587,
                      "src": "7641:4:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256,uint256,uint256,uint256,uint256)"
                      }
                    },
                    "id": 70759,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7641:242:160",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 70760,
                  "nodeType": "EmitStatement",
                  "src": "7636:247:160"
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 70763,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 70761,
                      "name": "currentBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 70602,
                      "src": "7903:14:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 70762,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7921:1:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7903:19:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 70579,
                  "id": 70764,
                  "nodeType": "Return",
                  "src": "7896:26:160"
                }
              ]
            },
            "baseFunctions": [
              48635
            ],
            "documentation": {
              "id": 70564,
              "nodeType": "StructuredDocumentation",
              "src": "5421:565:160",
              "text": " @dev Mints debt token to the `onBehalfOf` address.\n -  Only callable by the LendingPool\n - The resulting rate is the weighted average between the rate of the new debt\n and the rate of the previous debt\n @param user The address receiving the borrowed underlying, being the delegatee in case\n of credit delegate, or same as `onBehalfOf` otherwise\n @param onBehalfOf The address receiving the debt tokens\n @param amount The amount of debt tokens to mint\n @param rate The rate of the debt being minted*"
            },
            "functionSelector": "b3f1c93d",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 70576,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 70575,
                  "name": "onlyLendingPool",
                  "nameLocations": [
                    "6131:15:160"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 71811,
                  "src": "6131:15:160"
                },
                "nodeType": "ModifierInvocation",
                "src": "6131:15:160"
              }
            ],
            "name": "mint",
            "nameLocation": "6001:4:160",
            "overrides": {
              "id": 70574,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6122:8:160"
            },
            "parameters": {
              "id": 70573,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 70566,
                  "mutability": "mutable",
                  "name": "user",
                  "nameLocation": "6024:4:160",
                  "nodeType": "VariableDeclaration",
                  "scope": 70766,
                  "src": "6016:12:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 70565,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6016:7:160",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 70568,
                  "mutability": "mutable",
                  "name": "onBehalfOf",
                  "nameLocation": "6047:10:160",
                  "nodeType": "VariableDeclaration",
                  "scope": 70766,
                  "src": "6039:18:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 70567,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6039:7:160",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 70570,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "6076:6:160",
                  "nodeType": "VariableDeclaration",
                  "scope": 70766,
                  "src": "6068:14:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 70569,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6068:7:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 70572,
                  "mutability": "mutable",
                  "name": "rate",
                  "nameLocation": "6101:4:160",
                  "nodeType": "VariableDeclaration",
                  "scope": 70766,
                  "src": "6093:12:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 70571,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6093:7:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6005:107:160"
            },
            "returnParameters": {
              "id": 70579,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 70578,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 70766,
                  "src": "6156:4:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 70577,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6156:4:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6155:6:160"
            },
            "scope": 71313,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 70963,
            "nodeType": "FunctionDefinition",
            "src": "8118:2582:160",
            "nodes": [],
            "body": {
              "id": 70962,
              "nodeType": "Block",
              "src": "8196:2504:160",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    null,
                    70778,
                    70780
                  ],
                  "declarations": [
                    null,
                    {
                      "constant": false,
                      "id": 70778,
                      "mutability": "mutable",
                      "name": "currentBalance",
                      "nameLocation": "8218:14:160",
                      "nodeType": "VariableDeclaration",
                      "scope": 70962,
                      "src": "8210:22:160",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 70777,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8210:7:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 70780,
                      "mutability": "mutable",
                      "name": "balanceIncrease",
                      "nameLocation": "8242:15:160",
                      "nodeType": "VariableDeclaration",
                      "scope": 70962,
                      "src": "8234:23:160",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 70779,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8234:7:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 70784,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 70782,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70769,
                        "src": "8287:4:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 70781,
                      "name": "_calculateBalanceIncrease",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 71010,
                      "src": "8261:25:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$_t_uint256_$_t_uint256_$",
                        "typeString": "function (address) view returns (uint256,uint256,uint256)"
                      }
                    },
                    "id": 70783,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8261:31:160",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8207:85:160"
                },
                {
                  "assignments": [
                    70786
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 70786,
                      "mutability": "mutable",
                      "name": "previousSupply",
                      "nameLocation": "8313:14:160",
                      "nodeType": "VariableDeclaration",
                      "scope": 70962,
                      "src": "8305:22:160",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 70785,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8305:7:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 70789,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 70787,
                      "name": "totalSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        71072
                      ],
                      "referencedDeclaration": 71072,
                      "src": "8330:11:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                        "typeString": "function () view returns (uint256)"
                      }
                    },
                    "id": 70788,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8330:13:160",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8305:38:160"
                },
                {
                  "assignments": [
                    70791
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 70791,
                      "mutability": "mutable",
                      "name": "newAvgStableRate",
                      "nameLocation": "8362:16:160",
                      "nodeType": "VariableDeclaration",
                      "scope": 70962,
                      "src": "8354:24:160",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 70790,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8354:7:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 70793,
                  "initialValue": {
                    "hexValue": "30",
                    "id": 70792,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "8381:1:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8354:28:160"
                },
                {
                  "assignments": [
                    70795
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 70795,
                      "mutability": "mutable",
                      "name": "nextSupply",
                      "nameLocation": "8401:10:160",
                      "nodeType": "VariableDeclaration",
                      "scope": 70962,
                      "src": "8393:18:160",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 70794,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8393:7:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 70797,
                  "initialValue": {
                    "hexValue": "30",
                    "id": 70796,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "8414:1:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8393:22:160"
                },
                {
                  "assignments": [
                    70799
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 70799,
                      "mutability": "mutable",
                      "name": "userStableRate",
                      "nameLocation": "8434:14:160",
                      "nodeType": "VariableDeclaration",
                      "scope": 70962,
                      "src": "8426:22:160",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 70798,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8426:7:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 70803,
                  "initialValue": {
                    "baseExpression": {
                      "id": 70800,
                      "name": "_usersStableRate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 70387,
                      "src": "8451:16:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 70802,
                    "indexExpression": {
                      "id": 70801,
                      "name": "user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 70769,
                      "src": "8468:4:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "8451:22:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8426:47:160"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 70806,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 70804,
                      "name": "previousSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 70786,
                      "src": "8813:14:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "id": 70805,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 70771,
                      "src": "8831:6:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8813:24:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 70863,
                    "nodeType": "Block",
                    "src": "8890:709:160",
                    "statements": [
                      {
                        "expression": {
                          "id": 70817,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 70812,
                            "name": "nextSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 70795,
                            "src": "8905:10:160",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 70815,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 70771,
                                "src": "8937:6:160",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "id": 70813,
                                "name": "previousSupply",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 70786,
                                "src": "8918:14:160",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 70814,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "8933:3:160",
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 36598,
                              "src": "8918:18:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 70816,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8918:26:160",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8905:39:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 70818,
                        "nodeType": "ExpressionStatement",
                        "src": "8905:39:160"
                      },
                      {
                        "assignments": [
                          70820
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 70820,
                            "mutability": "mutable",
                            "name": "firstTerm",
                            "nameLocation": "8967:9:160",
                            "nodeType": "VariableDeclaration",
                            "scope": 70863,
                            "src": "8959:17:160",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 70819,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "8959:7:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 70827,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "id": 70823,
                                  "name": "previousSupply",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 70786,
                                  "src": "9001:14:160",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 70824,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "9016:8:160",
                                "memberName": "wadToRay",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 64446,
                                "src": "9001:23:160",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (uint256)"
                                }
                              },
                              "id": 70825,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9001:25:160",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 70821,
                              "name": "_avgStableRate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70379,
                              "src": "8979:14:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 70822,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "8994:6:160",
                            "memberName": "rayMul",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 64384,
                            "src": "8979:21:160",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 70826,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8979:48:160",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "8959:68:160"
                      },
                      {
                        "assignments": [
                          70829
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 70829,
                            "mutability": "mutable",
                            "name": "secondTerm",
                            "nameLocation": "9050:10:160",
                            "nodeType": "VariableDeclaration",
                            "scope": 70863,
                            "src": "9042:18:160",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 70828,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "9042:7:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 70836,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "id": 70832,
                                  "name": "amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 70771,
                                  "src": "9085:6:160",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 70833,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "9092:8:160",
                                "memberName": "wadToRay",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 64446,
                                "src": "9085:15:160",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (uint256)"
                                }
                              },
                              "id": 70834,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9085:17:160",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 70830,
                              "name": "userStableRate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70799,
                              "src": "9063:14:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 70831,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "9078:6:160",
                            "memberName": "rayMul",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 64384,
                            "src": "9063:21:160",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 70835,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9063:40:160",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "9042:61:160"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 70839,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 70837,
                            "name": "secondTerm",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 70829,
                            "src": "9359:10:160",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "id": 70838,
                            "name": "firstTerm",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 70820,
                            "src": "9373:9:160",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "9359:23:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 70861,
                          "nodeType": "Block",
                          "src": "9462:126:160",
                          "statements": [
                            {
                              "expression": {
                                "id": 70859,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 70847,
                                  "name": "newAvgStableRate",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 70791,
                                  "src": "9481:16:160",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "id": 70858,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "id": 70848,
                                    "name": "_avgStableRate",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 70379,
                                    "src": "9500:14:160",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "=",
                                  "rightHandSide": {
                                    "arguments": [
                                      {
                                        "arguments": [],
                                        "expression": {
                                          "argumentTypes": [],
                                          "expression": {
                                            "id": 70854,
                                            "name": "nextSupply",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 70795,
                                            "src": "9550:10:160",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "id": 70855,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberLocation": "9561:8:160",
                                          "memberName": "wadToRay",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 64446,
                                          "src": "9550:19:160",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                            "typeString": "function (uint256) pure returns (uint256)"
                                          }
                                        },
                                        "id": 70856,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "nameLocations": [],
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "9550:21:160",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "arguments": [
                                          {
                                            "id": 70851,
                                            "name": "secondTerm",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 70829,
                                            "src": "9531:10:160",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "expression": {
                                            "id": 70849,
                                            "name": "firstTerm",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 70820,
                                            "src": "9517:9:160",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "id": 70850,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberLocation": "9527:3:160",
                                          "memberName": "sub",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 36598,
                                          "src": "9517:13:160",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                                          }
                                        },
                                        "id": 70852,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "nameLocations": [],
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "9517:25:160",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 70853,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "9543:6:160",
                                      "memberName": "rayDiv",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 64411,
                                      "src": "9517:32:160",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 70857,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "9517:55:160",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "9500:72:160",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "9481:91:160",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 70860,
                              "nodeType": "ExpressionStatement",
                              "src": "9481:91:160"
                            }
                          ]
                        },
                        "id": 70862,
                        "nodeType": "IfStatement",
                        "src": "9355:233:160",
                        "trueBody": {
                          "id": 70846,
                          "nodeType": "Block",
                          "src": "9384:72:160",
                          "statements": [
                            {
                              "expression": {
                                "id": 70844,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 70840,
                                  "name": "newAvgStableRate",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 70791,
                                  "src": "9403:16:160",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "id": 70843,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "id": 70841,
                                    "name": "_avgStableRate",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 70379,
                                    "src": "9422:14:160",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "=",
                                  "rightHandSide": {
                                    "hexValue": "30",
                                    "id": 70842,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "9439:1:160",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "src": "9422:18:160",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "9403:37:160",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 70845,
                              "nodeType": "ExpressionStatement",
                              "src": "9403:37:160"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "id": 70864,
                  "nodeType": "IfStatement",
                  "src": "8809:790:160",
                  "trueBody": {
                    "id": 70811,
                    "nodeType": "Block",
                    "src": "8839:45:160",
                    "statements": [
                      {
                        "expression": {
                          "id": 70809,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 70807,
                            "name": "_avgStableRate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 70379,
                            "src": "8854:14:160",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "30",
                            "id": 70808,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8871:1:160",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "8854:18:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 70810,
                        "nodeType": "ExpressionStatement",
                        "src": "8854:18:160"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 70867,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 70865,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 70771,
                      "src": "9615:6:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "id": 70866,
                      "name": "currentBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 70778,
                      "src": "9625:14:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9615:24:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 70891,
                    "nodeType": "Block",
                    "src": "9736:110:160",
                    "statements": [
                      {
                        "expression": {
                          "id": 70889,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 70881,
                              "name": "_timestamps",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70383,
                              "src": "9791:11:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint40_$",
                                "typeString": "mapping(address => uint40)"
                              }
                            },
                            "id": 70883,
                            "indexExpression": {
                              "id": 70882,
                              "name": "user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70769,
                              "src": "9803:4:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "9791:17:160",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint40",
                              "typeString": "uint40"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 70886,
                                  "name": "block",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -4,
                                  "src": "9818:5:160",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_block",
                                    "typeString": "block"
                                  }
                                },
                                "id": 70887,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "9824:9:160",
                                "memberName": "timestamp",
                                "nodeType": "MemberAccess",
                                "src": "9818:15:160",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 70885,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "9811:6:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint40_$",
                                "typeString": "type(uint40)"
                              },
                              "typeName": {
                                "id": 70884,
                                "name": "uint40",
                                "nodeType": "ElementaryTypeName",
                                "src": "9811:6:160",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 70888,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9811:23:160",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint40",
                              "typeString": "uint40"
                            }
                          },
                          "src": "9791:43:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint40",
                            "typeString": "uint40"
                          }
                        },
                        "id": 70890,
                        "nodeType": "ExpressionStatement",
                        "src": "9791:43:160"
                      }
                    ]
                  },
                  "id": 70892,
                  "nodeType": "IfStatement",
                  "src": "9611:235:160",
                  "trueBody": {
                    "id": 70880,
                    "nodeType": "Block",
                    "src": "9641:89:160",
                    "statements": [
                      {
                        "expression": {
                          "id": 70872,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 70868,
                              "name": "_usersStableRate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70387,
                              "src": "9656:16:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 70870,
                            "indexExpression": {
                              "id": 70869,
                              "name": "user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70769,
                              "src": "9673:4:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "9656:22:160",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "30",
                            "id": 70871,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9681:1:160",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "9656:26:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 70873,
                        "nodeType": "ExpressionStatement",
                        "src": "9656:26:160"
                      },
                      {
                        "expression": {
                          "id": 70878,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 70874,
                              "name": "_timestamps",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70383,
                              "src": "9697:11:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint40_$",
                                "typeString": "mapping(address => uint40)"
                              }
                            },
                            "id": 70876,
                            "indexExpression": {
                              "id": 70875,
                              "name": "user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70769,
                              "src": "9709:4:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "9697:17:160",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint40",
                              "typeString": "uint40"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "30",
                            "id": 70877,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9717:1:160",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "9697:21:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint40",
                            "typeString": "uint40"
                          }
                        },
                        "id": 70879,
                        "nodeType": "ExpressionStatement",
                        "src": "9697:21:160"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 70899,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 70893,
                      "name": "_totalSupplyTimestamp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 70389,
                      "src": "9892:21:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 70896,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -4,
                            "src": "9923:5:160",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 70897,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "9929:9:160",
                          "memberName": "timestamp",
                          "nodeType": "MemberAccess",
                          "src": "9923:15:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 70895,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "9916:6:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint40_$",
                          "typeString": "type(uint40)"
                        },
                        "typeName": {
                          "id": 70894,
                          "name": "uint40",
                          "nodeType": "ElementaryTypeName",
                          "src": "9916:6:160",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 70898,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9916:23:160",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "src": "9892:47:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "id": 70900,
                  "nodeType": "ExpressionStatement",
                  "src": "9892:47:160"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 70903,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 70901,
                      "name": "balanceIncrease",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 70780,
                      "src": "9956:15:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "id": 70902,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 70771,
                      "src": "9974:6:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9956:24:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 70951,
                    "nodeType": "Block",
                    "src": "10401:240:160",
                    "statements": [
                      {
                        "assignments": [
                          70930
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 70930,
                            "mutability": "mutable",
                            "name": "amountToBurn",
                            "nameLocation": "10424:12:160",
                            "nodeType": "VariableDeclaration",
                            "scope": 70951,
                            "src": "10416:20:160",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 70929,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "10416:7:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 70935,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 70933,
                              "name": "balanceIncrease",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70780,
                              "src": "10450:15:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 70931,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70771,
                              "src": "10439:6:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 70932,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "10446:3:160",
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 36598,
                            "src": "10439:10:160",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 70934,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10439:27:160",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "10416:50:160"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 70937,
                              "name": "user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70769,
                              "src": "10487:4:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 70938,
                              "name": "amountToBurn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70930,
                              "src": "10493:12:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 70939,
                              "name": "previousSupply",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70786,
                              "src": "10507:14:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 70936,
                            "name": "_burn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              71312,
                              72275
                            ],
                            "referencedDeclaration": 71312,
                            "src": "10481:5:160",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256,uint256)"
                            }
                          },
                          "id": 70940,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10481:41:160",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 70941,
                        "nodeType": "ExpressionStatement",
                        "src": "10481:41:160"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 70943,
                              "name": "user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70769,
                              "src": "10547:4:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 70944,
                              "name": "amountToBurn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70930,
                              "src": "10553:12:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 70945,
                              "name": "currentBalance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70778,
                              "src": "10567:14:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 70946,
                              "name": "balanceIncrease",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70780,
                              "src": "10583:15:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 70947,
                              "name": "newAvgStableRate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70791,
                              "src": "10600:16:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 70948,
                              "name": "nextSupply",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70795,
                              "src": "10618:10:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 70942,
                            "name": "Burn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 48602,
                            "src": "10542:4:160",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256,uint256,uint256,uint256,uint256)"
                            }
                          },
                          "id": 70949,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10542:87:160",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 70950,
                        "nodeType": "EmitStatement",
                        "src": "10537:92:160"
                      }
                    ]
                  },
                  "id": 70952,
                  "nodeType": "IfStatement",
                  "src": "9952:689:160",
                  "trueBody": {
                    "id": 70928,
                    "nodeType": "Block",
                    "src": "9982:413:160",
                    "statements": [
                      {
                        "assignments": [
                          70905
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 70905,
                            "mutability": "mutable",
                            "name": "amountToMint",
                            "nameLocation": "10005:12:160",
                            "nodeType": "VariableDeclaration",
                            "scope": 70928,
                            "src": "9997:20:160",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 70904,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "9997:7:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 70910,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 70908,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70771,
                              "src": "10040:6:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 70906,
                              "name": "balanceIncrease",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70780,
                              "src": "10020:15:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 70907,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "10036:3:160",
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 36598,
                            "src": "10020:19:160",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 70909,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10020:27:160",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "9997:50:160"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 70912,
                              "name": "user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70769,
                              "src": "10068:4:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 70913,
                              "name": "amountToMint",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70905,
                              "src": "10074:12:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 70914,
                              "name": "previousSupply",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70786,
                              "src": "10088:14:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 70911,
                            "name": "_mint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              71254,
                              72226
                            ],
                            "referencedDeclaration": 71254,
                            "src": "10062:5:160",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256,uint256)"
                            }
                          },
                          "id": 70915,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10062:41:160",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 70916,
                        "nodeType": "ExpressionStatement",
                        "src": "10062:41:160"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 70918,
                              "name": "user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70769,
                              "src": "10146:4:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 70919,
                              "name": "user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70769,
                              "src": "10169:4:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 70920,
                              "name": "amountToMint",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70905,
                              "src": "10192:12:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 70921,
                              "name": "currentBalance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70778,
                              "src": "10223:14:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 70922,
                              "name": "balanceIncrease",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70780,
                              "src": "10256:15:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 70923,
                              "name": "userStableRate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70799,
                              "src": "10290:14:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 70924,
                              "name": "newAvgStableRate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70791,
                              "src": "10323:16:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 70925,
                              "name": "nextSupply",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 70795,
                              "src": "10358:10:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 70917,
                            "name": "Mint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 48587,
                            "src": "10123:4:160",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256,uint256,uint256,uint256,uint256,uint256)"
                            }
                          },
                          "id": 70926,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10123:260:160",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 70927,
                        "nodeType": "EmitStatement",
                        "src": "10118:265:160"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 70954,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70769,
                        "src": "10667:4:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 70957,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10681:1:160",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 70956,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "10673:7:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 70955,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "10673:7:160",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 70958,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10673:10:160",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 70959,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70771,
                        "src": "10685:6:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 70953,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27123,
                      "src": "10658:8:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 70960,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10658:34:160",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 70961,
                  "nodeType": "EmitStatement",
                  "src": "10653:39:160"
                }
              ]
            },
            "baseFunctions": [
              48643
            ],
            "documentation": {
              "id": 70767,
              "nodeType": "StructuredDocumentation",
              "src": "7938:174:160",
              "text": " @dev Burns debt of `user`\n @param user The address of the user getting his debt burned\n @param amount The amount of debt tokens getting burned*"
            },
            "functionSelector": "9dc29fac",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 70775,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 70774,
                  "name": "onlyLendingPool",
                  "nameLocations": [
                    "8180:15:160"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 71811,
                  "src": "8180:15:160"
                },
                "nodeType": "ModifierInvocation",
                "src": "8180:15:160"
              }
            ],
            "name": "burn",
            "nameLocation": "8127:4:160",
            "overrides": {
              "id": 70773,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "8171:8:160"
            },
            "parameters": {
              "id": 70772,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 70769,
                  "mutability": "mutable",
                  "name": "user",
                  "nameLocation": "8140:4:160",
                  "nodeType": "VariableDeclaration",
                  "scope": 70963,
                  "src": "8132:12:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 70768,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8132:7:160",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 70771,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "8154:6:160",
                  "nodeType": "VariableDeclaration",
                  "scope": 70963,
                  "src": "8146:14:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 70770,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8146:7:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8131:30:160"
            },
            "returnParameters": {
              "id": 70776,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8196:0:160"
            },
            "scope": 71313,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 71010,
            "nodeType": "FunctionDefinition",
            "src": "10990:666:160",
            "nodes": [],
            "body": {
              "id": 71009,
              "nodeType": "Block",
              "src": "11171:485:160",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    70976
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 70976,
                      "mutability": "mutable",
                      "name": "previousPrincipalBalance",
                      "nameLocation": "11190:24:160",
                      "nodeType": "VariableDeclaration",
                      "scope": 71009,
                      "src": "11182:32:160",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 70975,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "11182:7:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 70981,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 70979,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70966,
                        "src": "11233:4:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 70977,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "11217:5:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_super$_StableDebtToken_$71313_$",
                          "typeString": "type(contract super StableDebtToken)"
                        }
                      },
                      "id": 70978,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "11223:9:160",
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 26618,
                      "src": "11217:15:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view returns (uint256)"
                      }
                    },
                    "id": 70980,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11217:21:160",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11182:56:160"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 70984,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 70982,
                      "name": "previousPrincipalBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 70976,
                      "src": "11255:24:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 70983,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "11283:1:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "11255:29:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 70991,
                  "nodeType": "IfStatement",
                  "src": "11251:78:160",
                  "trueBody": {
                    "id": 70990,
                    "nodeType": "Block",
                    "src": "11286:43:160",
                    "statements": [
                      {
                        "expression": {
                          "components": [
                            {
                              "hexValue": "30",
                              "id": 70985,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11309:1:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "hexValue": "30",
                              "id": 70986,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11312:1:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "hexValue": "30",
                              "id": 70987,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11315:1:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "id": 70988,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "11308:9:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_rational_0_by_1_$_t_rational_0_by_1_$_t_rational_0_by_1_$",
                            "typeString": "tuple(int_const 0,int_const 0,int_const 0)"
                          }
                        },
                        "functionReturnParameters": 70974,
                        "id": 70989,
                        "nodeType": "Return",
                        "src": "11301:16:160"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    70993
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 70993,
                      "mutability": "mutable",
                      "name": "balanceIncrease",
                      "nameLocation": "11425:15:160",
                      "nodeType": "VariableDeclaration",
                      "scope": 71009,
                      "src": "11417:23:160",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 70992,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "11417:7:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 71000,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 70998,
                        "name": "previousPrincipalBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70976,
                        "src": "11463:24:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 70995,
                            "name": "user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 70966,
                            "src": "11453:4:160",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 70994,
                          "name": "balanceOf",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            70552
                          ],
                          "referencedDeclaration": 70552,
                          "src": "11443:9:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view returns (uint256)"
                          }
                        },
                        "id": 70996,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11443:15:160",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 70997,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "11459:3:160",
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 36598,
                      "src": "11443:19:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 70999,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11443:45:160",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11417:71:160"
                },
                {
                  "expression": {
                    "components": [
                      {
                        "id": 71001,
                        "name": "previousPrincipalBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70976,
                        "src": "11523:24:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 71004,
                            "name": "balanceIncrease",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 70993,
                            "src": "11591:15:160",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 71002,
                            "name": "previousPrincipalBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 70976,
                            "src": "11562:24:160",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 71003,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "11587:3:160",
                          "memberName": "add",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 36583,
                          "src": "11562:28:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 71005,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11562:45:160",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 71006,
                        "name": "balanceIncrease",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70993,
                        "src": "11622:15:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 71007,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "11508:140:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 70974,
                  "id": 71008,
                  "nodeType": "Return",
                  "src": "11501:147:160"
                }
              ]
            },
            "documentation": {
              "id": 70964,
              "nodeType": "StructuredDocumentation",
              "src": "10708:276:160",
              "text": " @dev Calculates the increase in balance since the last user interaction\n @param user The address of the user for which the interest is being accumulated\n @return The previous principal balance, the new principal balance and the balance increase*"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_calculateBalanceIncrease",
            "nameLocation": "10999:25:160",
            "parameters": {
              "id": 70967,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 70966,
                  "mutability": "mutable",
                  "name": "user",
                  "nameLocation": "11033:4:160",
                  "nodeType": "VariableDeclaration",
                  "scope": 71010,
                  "src": "11025:12:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 70965,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11025:7:160",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11024:14:160"
            },
            "returnParameters": {
              "id": 70974,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 70969,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 71010,
                  "src": "11103:7:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 70968,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11103:7:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 70971,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 71010,
                  "src": "11125:7:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 70970,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11125:7:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 70973,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 71010,
                  "src": "11147:7:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 70972,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11147:7:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11088:77:160"
            },
            "scope": 71313,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 71038,
            "nodeType": "FunctionDefinition",
            "src": "11795:343:160",
            "nodes": [],
            "body": {
              "id": 71037,
              "nodeType": "Block",
              "src": "11989:149:160",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    71024
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 71024,
                      "mutability": "mutable",
                      "name": "avgRate",
                      "nameLocation": "12008:7:160",
                      "nodeType": "VariableDeclaration",
                      "scope": 71037,
                      "src": "12000:15:160",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 71023,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12000:7:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 71026,
                  "initialValue": {
                    "id": 71025,
                    "name": "_avgStableRate",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 70379,
                    "src": "12018:14:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12000:32:160"
                },
                {
                  "expression": {
                    "components": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 71027,
                            "name": "super",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -25,
                            "src": "12051:5:160",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_super$_StableDebtToken_$71313_$",
                              "typeString": "type(contract super StableDebtToken)"
                            }
                          },
                          "id": 71028,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "12057:11:160",
                          "memberName": "totalSupply",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 26604,
                          "src": "12051:17:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 71029,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12051:19:160",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 71031,
                            "name": "avgRate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 71024,
                            "src": "12089:7:160",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 71030,
                          "name": "_calcTotalSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 71204,
                          "src": "12072:16:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256) view returns (uint256)"
                          }
                        },
                        "id": 71032,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12072:25:160",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 71033,
                        "name": "avgRate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71024,
                        "src": "12099:7:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 71034,
                        "name": "_totalSupplyTimestamp",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70389,
                        "src": "12108:21:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      }
                    ],
                    "id": 71035,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "12050:80:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint40_$",
                      "typeString": "tuple(uint256,uint256,uint256,uint40)"
                    }
                  },
                  "functionReturnParameters": 71022,
                  "id": 71036,
                  "nodeType": "Return",
                  "src": "12043:87:160"
                }
              ]
            },
            "baseFunctions": [
              48677
            ],
            "documentation": {
              "id": 71011,
              "nodeType": "StructuredDocumentation",
              "src": "11664:125:160",
              "text": " @dev Returns the principal and total supply, the average borrow rate and the last supply update timestamp*"
            },
            "functionSelector": "79774338",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getSupplyData",
            "nameLocation": "11804:13:160",
            "overrides": {
              "id": 71013,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "11859:8:160"
            },
            "parameters": {
              "id": 71012,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11817:2:160"
            },
            "returnParameters": {
              "id": 71022,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 71015,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 71038,
                  "src": "11900:7:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 71014,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11900:7:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 71017,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 71038,
                  "src": "11922:7:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 71016,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11922:7:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 71019,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 71038,
                  "src": "11944:7:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 71018,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11944:7:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 71021,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 71038,
                  "src": "11966:6:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint40",
                    "typeString": "uint40"
                  },
                  "typeName": {
                    "id": 71020,
                    "name": "uint40",
                    "nodeType": "ElementaryTypeName",
                    "src": "11966:6:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11885:98:160"
            },
            "scope": 71313,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 71058,
            "nodeType": "FunctionDefinition",
            "src": "12233:189:160",
            "nodes": [],
            "body": {
              "id": 71057,
              "nodeType": "Block",
              "src": "12317:105:160",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    71048
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 71048,
                      "mutability": "mutable",
                      "name": "avgRate",
                      "nameLocation": "12336:7:160",
                      "nodeType": "VariableDeclaration",
                      "scope": 71057,
                      "src": "12328:15:160",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 71047,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12328:7:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 71050,
                  "initialValue": {
                    "id": 71049,
                    "name": "_avgStableRate",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 70379,
                    "src": "12346:14:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12328:32:160"
                },
                {
                  "expression": {
                    "components": [
                      {
                        "arguments": [
                          {
                            "id": 71052,
                            "name": "avgRate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 71048,
                            "src": "12396:7:160",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 71051,
                          "name": "_calcTotalSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 71204,
                          "src": "12379:16:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256) view returns (uint256)"
                          }
                        },
                        "id": 71053,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12379:25:160",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 71054,
                        "name": "avgRate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71048,
                        "src": "12406:7:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 71055,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "12378:36:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 71046,
                  "id": 71056,
                  "nodeType": "Return",
                  "src": "12371:43:160"
                }
              ]
            },
            "baseFunctions": [
              48691
            ],
            "documentation": {
              "id": 71039,
              "nodeType": "StructuredDocumentation",
              "src": "12146:81:160",
              "text": " @dev Returns the the total supply and the average stable rate*"
            },
            "functionSelector": "f731e9be",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getTotalSupplyAndAvgRate",
            "nameLocation": "12242:24:160",
            "overrides": {
              "id": 71041,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "12281:8:160"
            },
            "parameters": {
              "id": 71040,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12266:2:160"
            },
            "returnParameters": {
              "id": 71046,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 71043,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 71058,
                  "src": "12299:7:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 71042,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12299:7:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 71045,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 71058,
                  "src": "12308:7:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 71044,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12308:7:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12298:18:160"
            },
            "scope": 71313,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 71072,
            "nodeType": "FunctionDefinition",
            "src": "12485:204:160",
            "nodes": [],
            "body": {
              "id": 71071,
              "nodeType": "Block",
              "src": "12631:58:160",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 71068,
                        "name": "_avgStableRate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70379,
                        "src": "12666:14:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 71067,
                      "name": "_calcTotalSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 71204,
                      "src": "12649:16:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view returns (uint256)"
                      }
                    },
                    "id": 71069,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12649:32:160",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 71066,
                  "id": 71070,
                  "nodeType": "Return",
                  "src": "12642:39:160"
                }
              ]
            },
            "baseFunctions": [
              26604,
              27138
            ],
            "documentation": {
              "id": 71059,
              "nodeType": "StructuredDocumentation",
              "src": "12430:49:160",
              "text": " @dev Returns the total supply*"
            },
            "functionSelector": "18160ddd",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "totalSupply",
            "nameLocation": "12494:11:160",
            "overrides": {
              "id": 71063,
              "nodeType": "OverrideSpecifier",
              "overrides": [
                {
                  "id": 71061,
                  "name": "ERC20Upgradeable",
                  "nameLocations": [
                    "12560:16:160"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 27111,
                  "src": "12560:16:160"
                },
                {
                  "id": 71062,
                  "name": "IERC20Upgradeable",
                  "nameLocations": [
                    "12578:17:160"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 27189,
                  "src": "12578:17:160"
                }
              ],
              "src": "12550:46:160"
            },
            "parameters": {
              "id": 71060,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12505:2:160"
            },
            "returnParameters": {
              "id": 71066,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 71065,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 71072,
                  "src": "12616:7:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 71064,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12616:7:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12615:9:160"
            },
            "scope": 71313,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 71082,
            "nodeType": "FunctionDefinition",
            "src": "12787:122:160",
            "nodes": [],
            "body": {
              "id": 71081,
              "nodeType": "Block",
              "src": "12862:47:160",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 71079,
                    "name": "_totalSupplyTimestamp",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 70389,
                    "src": "12880:21:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "functionReturnParameters": 71078,
                  "id": 71080,
                  "nodeType": "Return",
                  "src": "12873:28:160"
                }
              ]
            },
            "baseFunctions": [
              48683
            ],
            "documentation": {
              "id": 71073,
              "nodeType": "StructuredDocumentation",
              "src": "12697:84:160",
              "text": " @dev Returns the timestamp at which the total supply was updated*"
            },
            "functionSelector": "e7484890",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getTotalSupplyLastUpdated",
            "nameLocation": "12796:25:160",
            "overrides": {
              "id": 71075,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "12836:8:160"
            },
            "parameters": {
              "id": 71074,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12821:2:160"
            },
            "returnParameters": {
              "id": 71078,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 71077,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 71082,
                  "src": "12854:6:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint40",
                    "typeString": "uint40"
                  },
                  "typeName": {
                    "id": 71076,
                    "name": "uint40",
                    "nodeType": "ElementaryTypeName",
                    "src": "12854:6:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12853:8:160"
            },
            "scope": 71313,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 71097,
            "nodeType": "FunctionDefinition",
            "src": "13113:138:160",
            "nodes": [],
            "body": {
              "id": 71096,
              "nodeType": "Block",
              "src": "13204:47:160",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 71093,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71085,
                        "src": "13238:4:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 71091,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "13222:5:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_super$_StableDebtToken_$71313_$",
                          "typeString": "type(contract super StableDebtToken)"
                        }
                      },
                      "id": 71092,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "13228:9:160",
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 26618,
                      "src": "13222:15:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view returns (uint256)"
                      }
                    },
                    "id": 71094,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13222:21:160",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 71090,
                  "id": 71095,
                  "nodeType": "Return",
                  "src": "13215:28:160"
                }
              ]
            },
            "baseFunctions": [
              48699
            ],
            "documentation": {
              "id": 71083,
              "nodeType": "StructuredDocumentation",
              "src": "12917:190:160",
              "text": " @dev Returns the principal debt balance of the user from\n @param user The user's address\n @return The debt balance of the user since the last burn/mint action*"
            },
            "functionSelector": "c634dfaa",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "principalBalanceOf",
            "nameLocation": "13122:18:160",
            "overrides": {
              "id": 71087,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "13177:8:160"
            },
            "parameters": {
              "id": 71086,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 71085,
                  "mutability": "mutable",
                  "name": "user",
                  "nameLocation": "13149:4:160",
                  "nodeType": "VariableDeclaration",
                  "scope": 71097,
                  "src": "13141:12:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 71084,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13141:7:160",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13140:14:160"
            },
            "returnParameters": {
              "id": 71090,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 71089,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 71097,
                  "src": "13195:7:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 71088,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13195:7:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13194:9:160"
            },
            "scope": 71313,
            "stateMutability": "view",
            "virtual": true,
            "visibility": "external"
          },
          {
            "id": 71106,
            "nodeType": "FunctionDefinition",
            "src": "13370:108:160",
            "nodes": [],
            "body": {
              "id": 71105,
              "nodeType": "Block",
              "src": "13436:42:160",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 71103,
                    "name": "_underlyingAsset",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 70373,
                    "src": "13454:16:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 71102,
                  "id": 71104,
                  "nodeType": "Return",
                  "src": "13447:23:160"
                }
              ]
            },
            "documentation": {
              "id": 71098,
              "nodeType": "StructuredDocumentation",
              "src": "13259:105:160",
              "text": " @dev Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)*"
            },
            "functionSelector": "b16a19de",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "UNDERLYING_ASSET_ADDRESS",
            "nameLocation": "13379:24:160",
            "parameters": {
              "id": 71099,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13403:2:160"
            },
            "returnParameters": {
              "id": 71102,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 71101,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 71106,
                  "src": "13427:7:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 71100,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13427:7:160",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13426:9:160"
            },
            "scope": 71313,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 71117,
            "nodeType": "FunctionDefinition",
            "src": "13582:94:160",
            "nodes": [],
            "body": {
              "id": 71116,
              "nodeType": "Block",
              "src": "13633:43:160",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 71113,
                      "name": "_getLendingPool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        71169
                      ],
                      "referencedDeclaration": 71169,
                      "src": "13651:15:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$48084_$",
                        "typeString": "function () view returns (contract ILendingPool)"
                      }
                    },
                    "id": 71114,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13651:17:160",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPool_$48084",
                      "typeString": "contract ILendingPool"
                    }
                  },
                  "functionReturnParameters": 71112,
                  "id": 71115,
                  "nodeType": "Return",
                  "src": "13644:24:160"
                }
              ]
            },
            "documentation": {
              "id": 71107,
              "nodeType": "StructuredDocumentation",
              "src": "13486:90:160",
              "text": " @dev Returns the address of the lending pool where this aToken is used*"
            },
            "functionSelector": "7535d246",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "POOL",
            "nameLocation": "13591:4:160",
            "parameters": {
              "id": 71108,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13595:2:160"
            },
            "returnParameters": {
              "id": 71112,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 71111,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 71117,
                  "src": "13619:12:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ILendingPool_$48084",
                    "typeString": "contract ILendingPool"
                  },
                  "typeName": {
                    "id": 71110,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 71109,
                      "name": "ILendingPool",
                      "nameLocations": [
                        "13619:12:160"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 48084,
                      "src": "13619:12:160"
                    },
                    "referencedDeclaration": 48084,
                    "src": "13619:12:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPool_$48084",
                      "typeString": "contract ILendingPool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13618:14:160"
            },
            "scope": 71313,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 71129,
            "nodeType": "FunctionDefinition",
            "src": "13772:154:160",
            "nodes": [],
            "body": {
              "id": 71128,
              "nodeType": "Block",
              "src": "13870:56:160",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 71125,
                      "name": "_getPoolIncentivesController",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        71144
                      ],
                      "referencedDeclaration": 71144,
                      "src": "13888:28:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IPoolIncentivesController_$48421_$",
                        "typeString": "function () view returns (contract IPoolIncentivesController)"
                      }
                    },
                    "id": 71126,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13888:30:160",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPoolIncentivesController_$48421",
                      "typeString": "contract IPoolIncentivesController"
                    }
                  },
                  "functionReturnParameters": 71124,
                  "id": 71127,
                  "nodeType": "Return",
                  "src": "13881:37:160"
                }
              ]
            },
            "baseFunctions": [
              48706
            ],
            "documentation": {
              "id": 71118,
              "nodeType": "StructuredDocumentation",
              "src": "13684:82:160",
              "text": " @dev Returns the address of the incentives controller contract*"
            },
            "functionSelector": "19ef9268",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getPoolIncentivesController",
            "nameLocation": "13781:27:160",
            "overrides": {
              "id": 71120,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "13825:8:160"
            },
            "parameters": {
              "id": 71119,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13808:2:160"
            },
            "returnParameters": {
              "id": 71124,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 71123,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 71129,
                  "src": "13843:25:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IPoolIncentivesController_$48421",
                    "typeString": "contract IPoolIncentivesController"
                  },
                  "typeName": {
                    "id": 71122,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 71121,
                      "name": "IPoolIncentivesController",
                      "nameLocations": [
                        "13843:25:160"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 48421,
                      "src": "13843:25:160"
                    },
                    "referencedDeclaration": 48421,
                    "src": "13843:25:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPoolIncentivesController_$48421",
                      "typeString": "contract IPoolIncentivesController"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13842:27:160"
            },
            "scope": 71313,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 71144,
            "nodeType": "FunctionDefinition",
            "src": "14020:198:160",
            "nodes": [],
            "body": {
              "id": 71143,
              "nodeType": "Block",
              "src": "14119:99:160",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 71138,
                            "name": "_addressProvider",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 70369,
                            "src": "14163:16:160",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAddressProvider_$46447",
                              "typeString": "contract IAddressProvider"
                            }
                          },
                          "id": 71139,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "14180:27:160",
                          "memberName": "getPoolIncentivesController",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 46361,
                          "src": "14163:44:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                            "typeString": "function () view external returns (address)"
                          }
                        },
                        "id": 71140,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14163:46:160",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 71137,
                      "name": "IPoolIncentivesController",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 48421,
                      "src": "14137:25:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IPoolIncentivesController_$48421_$",
                        "typeString": "type(contract IPoolIncentivesController)"
                      }
                    },
                    "id": 71141,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14137:73:160",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPoolIncentivesController_$48421",
                      "typeString": "contract IPoolIncentivesController"
                    }
                  },
                  "functionReturnParameters": 71136,
                  "id": 71142,
                  "nodeType": "Return",
                  "src": "14130:80:160"
                }
              ]
            },
            "baseFunctions": [
              72100
            ],
            "documentation": {
              "id": 71130,
              "nodeType": "StructuredDocumentation",
              "src": "13934:80:160",
              "text": " @dev For internal usage in the logic of the parent contracts*"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getPoolIncentivesController",
            "nameLocation": "14029:28:160",
            "overrides": {
              "id": 71132,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "14074:8:160"
            },
            "parameters": {
              "id": 71131,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14057:2:160"
            },
            "returnParameters": {
              "id": 71136,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 71135,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 71144,
                  "src": "14092:25:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IPoolIncentivesController_$48421",
                    "typeString": "contract IPoolIncentivesController"
                  },
                  "typeName": {
                    "id": 71134,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 71133,
                      "name": "IPoolIncentivesController",
                      "nameLocations": [
                        "14092:25:160"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 48421,
                      "src": "14092:25:160"
                    },
                    "referencedDeclaration": 48421,
                    "src": "14092:25:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPoolIncentivesController_$48421",
                      "typeString": "contract IPoolIncentivesController"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14091:27:160"
            },
            "scope": 71313,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 71154,
            "nodeType": "FunctionDefinition",
            "src": "14312:121:160",
            "nodes": [],
            "body": {
              "id": 71153,
              "nodeType": "Block",
              "src": "14391:42:160",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 71151,
                    "name": "_underlyingAsset",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 70373,
                    "src": "14409:16:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 71150,
                  "id": 71152,
                  "nodeType": "Return",
                  "src": "14402:23:160"
                }
              ]
            },
            "baseFunctions": [
              72038
            ],
            "documentation": {
              "id": 71145,
              "nodeType": "StructuredDocumentation",
              "src": "14226:80:160",
              "text": " @dev For internal usage in the logic of the parent contracts*"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getUnderlyingAssetAddress",
            "nameLocation": "14321:26:160",
            "overrides": {
              "id": 71147,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "14364:8:160"
            },
            "parameters": {
              "id": 71146,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14347:2:160"
            },
            "returnParameters": {
              "id": 71150,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 71149,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 71154,
                  "src": "14382:7:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 71148,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14382:7:160",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14381:9:160"
            },
            "scope": 71313,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 71169,
            "nodeType": "FunctionDefinition",
            "src": "14527:146:160",
            "nodes": [],
            "body": {
              "id": 71168,
              "nodeType": "Block",
              "src": "14600:73:160",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 71163,
                            "name": "_addressProvider",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 70369,
                            "src": "14631:16:160",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAddressProvider_$46447",
                              "typeString": "contract IAddressProvider"
                            }
                          },
                          "id": 71164,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "14648:14:160",
                          "memberName": "getLendingPool",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 46256,
                          "src": "14631:31:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                            "typeString": "function () view external returns (address)"
                          }
                        },
                        "id": 71165,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14631:33:160",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 71162,
                      "name": "ILendingPool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 48084,
                      "src": "14618:12:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_ILendingPool_$48084_$",
                        "typeString": "type(contract ILendingPool)"
                      }
                    },
                    "id": 71166,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14618:47:160",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPool_$48084",
                      "typeString": "contract ILendingPool"
                    }
                  },
                  "functionReturnParameters": 71161,
                  "id": 71167,
                  "nodeType": "Return",
                  "src": "14611:54:160"
                }
              ]
            },
            "baseFunctions": [
              72044
            ],
            "documentation": {
              "id": 71155,
              "nodeType": "StructuredDocumentation",
              "src": "14441:80:160",
              "text": " @dev For internal usage in the logic of the parent contracts*"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getLendingPool",
            "nameLocation": "14536:15:160",
            "overrides": {
              "id": 71157,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "14568:8:160"
            },
            "parameters": {
              "id": 71156,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14551:2:160"
            },
            "returnParameters": {
              "id": 71161,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 71160,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 71169,
                  "src": "14586:12:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ILendingPool_$48084",
                    "typeString": "contract ILendingPool"
                  },
                  "typeName": {
                    "id": 71159,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 71158,
                      "name": "ILendingPool",
                      "nameLocations": [
                        "14586:12:160"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 48084,
                      "src": "14586:12:160"
                    },
                    "referencedDeclaration": 48084,
                    "src": "14586:12:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPool_$48084",
                      "typeString": "contract ILendingPool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14585:14:160"
            },
            "scope": 71313,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 71204,
            "nodeType": "FunctionDefinition",
            "src": "14890:405:160",
            "nodes": [],
            "body": {
              "id": 71203,
              "nodeType": "Block",
              "src": "14973:322:160",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    71178
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 71178,
                      "mutability": "mutable",
                      "name": "principalSupply",
                      "nameLocation": "14992:15:160",
                      "nodeType": "VariableDeclaration",
                      "scope": 71203,
                      "src": "14984:23:160",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 71177,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14984:7:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 71182,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 71179,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "15010:5:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_super$_StableDebtToken_$71313_$",
                          "typeString": "type(contract super StableDebtToken)"
                        }
                      },
                      "id": 71180,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "15016:11:160",
                      "memberName": "totalSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 26604,
                      "src": "15010:17:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                        "typeString": "function () view returns (uint256)"
                      }
                    },
                    "id": 71181,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15010:19:160",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14984:45:160"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 71185,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 71183,
                      "name": "principalSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 71178,
                      "src": "15046:15:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 71184,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "15065:1:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "15046:20:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 71189,
                  "nodeType": "IfStatement",
                  "src": "15042:61:160",
                  "trueBody": {
                    "id": 71188,
                    "nodeType": "Block",
                    "src": "15068:35:160",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30",
                          "id": 71186,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "15090:1:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 71176,
                        "id": 71187,
                        "nodeType": "Return",
                        "src": "15083:8:160"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    71191
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 71191,
                      "mutability": "mutable",
                      "name": "cumulatedInterest",
                      "nameLocation": "15123:17:160",
                      "nodeType": "VariableDeclaration",
                      "scope": 71203,
                      "src": "15115:25:160",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 71190,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "15115:7:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 71197,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 71194,
                        "name": "avgRate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71172,
                        "src": "15195:7:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 71195,
                        "name": "_totalSupplyTimestamp",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 70389,
                        "src": "15204:21:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      ],
                      "expression": {
                        "id": 71192,
                        "name": "MathUtils",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 64132,
                        "src": "15157:9:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_MathUtils_$64132_$",
                          "typeString": "type(library MathUtils)"
                        }
                      },
                      "id": 71193,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "15167:27:160",
                      "memberName": "calculateCompoundedInterest",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 64131,
                      "src": "15157:37:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint40_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint40) view returns (uint256)"
                      }
                    },
                    "id": 71196,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15157:69:160",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15115:111:160"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 71200,
                        "name": "cumulatedInterest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71191,
                        "src": "15269:17:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 71198,
                        "name": "principalSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71178,
                        "src": "15246:15:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 71199,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "15262:6:160",
                      "memberName": "rayMul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 64384,
                      "src": "15246:22:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 71201,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15246:41:160",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 71176,
                  "id": 71202,
                  "nodeType": "Return",
                  "src": "15239:48:160"
                }
              ]
            },
            "documentation": {
              "id": 71170,
              "nodeType": "StructuredDocumentation",
              "src": "14681:203:160",
              "text": " @dev Calculates the total supply\n @param avgRate The average rate at which the total supply increases\n @return The debt balance of the user since the last burn/mint action*"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_calcTotalSupply",
            "nameLocation": "14899:16:160",
            "parameters": {
              "id": 71173,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 71172,
                  "mutability": "mutable",
                  "name": "avgRate",
                  "nameLocation": "14924:7:160",
                  "nodeType": "VariableDeclaration",
                  "scope": 71204,
                  "src": "14916:15:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 71171,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14916:7:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14915:17:160"
            },
            "returnParameters": {
              "id": 71176,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 71175,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 71204,
                  "src": "14964:7:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 71174,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14964:7:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14963:9:160"
            },
            "scope": 71313,
            "stateMutability": "view",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "id": 71254,
            "nodeType": "FunctionDefinition",
            "src": "15545:482:160",
            "nodes": [],
            "body": {
              "id": 71253,
              "nodeType": "Block",
              "src": "15660:367:160",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    71215
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 71215,
                      "mutability": "mutable",
                      "name": "oldAccountBalance",
                      "nameLocation": "15679:17:160",
                      "nodeType": "VariableDeclaration",
                      "scope": 71253,
                      "src": "15671:25:160",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 71214,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "15671:7:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 71220,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 71218,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71207,
                        "src": "15715:7:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 71216,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "15699:5:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_super$_StableDebtToken_$71313_$",
                          "typeString": "type(contract super StableDebtToken)"
                        }
                      },
                      "id": 71217,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "15705:9:160",
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 26618,
                      "src": "15699:15:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view returns (uint256)"
                      }
                    },
                    "id": 71219,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15699:24:160",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15671:52:160"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 71224,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71207,
                        "src": "15746:7:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 71225,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71209,
                        "src": "15755:6:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 71221,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "15734:5:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_super$_StableDebtToken_$71313_$",
                          "typeString": "type(contract super StableDebtToken)"
                        }
                      },
                      "id": 71223,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "15740:5:160",
                      "memberName": "_mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 72226,
                      "src": "15734:11:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 71226,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15734:28:160",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 71227,
                  "nodeType": "ExpressionStatement",
                  "src": "15734:28:160"
                },
                {
                  "assignments": [
                    71230
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 71230,
                      "mutability": "mutable",
                      "name": "incentivesController",
                      "nameLocation": "15801:20:160",
                      "nodeType": "VariableDeclaration",
                      "scope": 71253,
                      "src": "15775:46:160",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IPoolIncentivesController_$48421",
                        "typeString": "contract IPoolIncentivesController"
                      },
                      "typeName": {
                        "id": 71229,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 71228,
                          "name": "IPoolIncentivesController",
                          "nameLocations": [
                            "15775:25:160"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 48421,
                          "src": "15775:25:160"
                        },
                        "referencedDeclaration": 48421,
                        "src": "15775:25:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPoolIncentivesController_$48421",
                          "typeString": "contract IPoolIncentivesController"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 71233,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 71231,
                      "name": "_getPoolIncentivesController",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        71144
                      ],
                      "referencedDeclaration": 71144,
                      "src": "15824:28:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IPoolIncentivesController_$48421_$",
                        "typeString": "function () view returns (contract IPoolIncentivesController)"
                      }
                    },
                    "id": 71232,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15824:30:160",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPoolIncentivesController_$48421",
                      "typeString": "contract IPoolIncentivesController"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15775:79:160"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 71242,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 71236,
                          "name": "incentivesController",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 71230,
                          "src": "15879:20:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IPoolIncentivesController_$48421",
                            "typeString": "contract IPoolIncentivesController"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_IPoolIncentivesController_$48421",
                            "typeString": "contract IPoolIncentivesController"
                          }
                        ],
                        "id": 71235,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "15871:7:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 71234,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "15871:7:160",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 71237,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15871:29:160",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 71240,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "15912:1:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 71239,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "15904:7:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 71238,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "15904:7:160",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 71241,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15904:10:160",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "15871:43:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 71252,
                  "nodeType": "IfStatement",
                  "src": "15867:153:160",
                  "trueBody": {
                    "id": 71251,
                    "nodeType": "Block",
                    "src": "15916:104:160",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 71246,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 71207,
                              "src": "15965:7:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 71247,
                              "name": "oldTotalSupply",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 71211,
                              "src": "15974:14:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 71248,
                              "name": "oldAccountBalance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 71215,
                              "src": "15990:17:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 71243,
                              "name": "incentivesController",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 71230,
                              "src": "15931:20:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IPoolIncentivesController_$48421",
                                "typeString": "contract IPoolIncentivesController"
                              }
                            },
                            "id": 71245,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "15952:12:160",
                            "memberName": "handleAction",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 48388,
                            "src": "15931:33:160",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256,uint256) external"
                            }
                          },
                          "id": 71249,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15931:77:160",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 71250,
                        "nodeType": "ExpressionStatement",
                        "src": "15931:77:160"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 71205,
              "nodeType": "StructuredDocumentation",
              "src": "15303:236:160",
              "text": " @dev Mints stable debt tokens to an user\n @param account The account receiving the debt tokens\n @param amount The amount being minted\n @param oldTotalSupply the total supply before the minting event*"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_mint",
            "nameLocation": "15554:5:160",
            "parameters": {
              "id": 71212,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 71207,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "15578:7:160",
                  "nodeType": "VariableDeclaration",
                  "scope": 71254,
                  "src": "15570:15:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 71206,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15570:7:160",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 71209,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "15604:6:160",
                  "nodeType": "VariableDeclaration",
                  "scope": 71254,
                  "src": "15596:14:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 71208,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15596:7:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 71211,
                  "mutability": "mutable",
                  "name": "oldTotalSupply",
                  "nameLocation": "15629:14:160",
                  "nodeType": "VariableDeclaration",
                  "scope": 71254,
                  "src": "15621:22:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 71210,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15621:7:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15559:91:160"
            },
            "returnParameters": {
              "id": 71213,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15660:0:160"
            },
            "scope": 71313,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 71312,
            "nodeType": "FunctionDefinition",
            "src": "16272:564:160",
            "nodes": [],
            "body": {
              "id": 71311,
              "nodeType": "Block",
              "src": "16387:449:160",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    71265
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 71265,
                      "mutability": "mutable",
                      "name": "oldAccountBalance",
                      "nameLocation": "16406:17:160",
                      "nodeType": "VariableDeclaration",
                      "scope": 71311,
                      "src": "16398:25:160",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 71264,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "16398:7:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 71270,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 71268,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71257,
                        "src": "16442:7:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 71266,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "16426:5:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_super$_StableDebtToken_$71313_$",
                          "typeString": "type(contract super StableDebtToken)"
                        }
                      },
                      "id": 71267,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "16432:9:160",
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 26618,
                      "src": "16426:15:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view returns (uint256)"
                      }
                    },
                    "id": 71269,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16426:24:160",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16398:52:160"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 71274,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 71272,
                          "name": "oldAccountBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 71265,
                          "src": "16471:17:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "id": 71273,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 71259,
                          "src": "16492:6:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "16471:27:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "expression": {
                          "id": 71275,
                          "name": "Errors",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 57944,
                          "src": "16500:6:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Errors_$57944_$",
                            "typeString": "type(library Errors)"
                          }
                        },
                        "id": 71276,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "16507:24:160",
                        "memberName": "LPL_BURN_EXCEEDS_BALANCE",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 57751,
                        "src": "16500:31:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 71271,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "16463:7:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 71277,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16463:69:160",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 71278,
                  "nodeType": "ExpressionStatement",
                  "src": "16463:69:160"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 71282,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71257,
                        "src": "16555:7:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 71283,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71259,
                        "src": "16564:6:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 71279,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "16543:5:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_super$_StableDebtToken_$71313_$",
                          "typeString": "type(contract super StableDebtToken)"
                        }
                      },
                      "id": 71281,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "16549:5:160",
                      "memberName": "_burn",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 72275,
                      "src": "16543:11:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 71284,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16543:28:160",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 71285,
                  "nodeType": "ExpressionStatement",
                  "src": "16543:28:160"
                },
                {
                  "assignments": [
                    71288
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 71288,
                      "mutability": "mutable",
                      "name": "incentivesController",
                      "nameLocation": "16610:20:160",
                      "nodeType": "VariableDeclaration",
                      "scope": 71311,
                      "src": "16584:46:160",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IPoolIncentivesController_$48421",
                        "typeString": "contract IPoolIncentivesController"
                      },
                      "typeName": {
                        "id": 71287,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 71286,
                          "name": "IPoolIncentivesController",
                          "nameLocations": [
                            "16584:25:160"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 48421,
                          "src": "16584:25:160"
                        },
                        "referencedDeclaration": 48421,
                        "src": "16584:25:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPoolIncentivesController_$48421",
                          "typeString": "contract IPoolIncentivesController"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 71291,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 71289,
                      "name": "_getPoolIncentivesController",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        71144
                      ],
                      "referencedDeclaration": 71144,
                      "src": "16633:28:160",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IPoolIncentivesController_$48421_$",
                        "typeString": "function () view returns (contract IPoolIncentivesController)"
                      }
                    },
                    "id": 71290,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16633:30:160",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPoolIncentivesController_$48421",
                      "typeString": "contract IPoolIncentivesController"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16584:79:160"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 71300,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 71294,
                          "name": "incentivesController",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 71288,
                          "src": "16688:20:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IPoolIncentivesController_$48421",
                            "typeString": "contract IPoolIncentivesController"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_IPoolIncentivesController_$48421",
                            "typeString": "contract IPoolIncentivesController"
                          }
                        ],
                        "id": 71293,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "16680:7:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 71292,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "16680:7:160",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 71295,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16680:29:160",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 71298,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "16721:1:160",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 71297,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "16713:7:160",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 71296,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "16713:7:160",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 71299,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16713:10:160",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "16680:43:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 71310,
                  "nodeType": "IfStatement",
                  "src": "16676:153:160",
                  "trueBody": {
                    "id": 71309,
                    "nodeType": "Block",
                    "src": "16725:104:160",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 71304,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 71257,
                              "src": "16774:7:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 71305,
                              "name": "oldTotalSupply",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 71261,
                              "src": "16783:14:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 71306,
                              "name": "oldAccountBalance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 71265,
                              "src": "16799:17:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 71301,
                              "name": "incentivesController",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 71288,
                              "src": "16740:20:160",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IPoolIncentivesController_$48421",
                                "typeString": "contract IPoolIncentivesController"
                              }
                            },
                            "id": 71303,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "16761:12:160",
                            "memberName": "handleAction",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 48388,
                            "src": "16740:33:160",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256,uint256) external"
                            }
                          },
                          "id": 71307,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16740:77:160",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 71308,
                        "nodeType": "ExpressionStatement",
                        "src": "16740:77:160"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 71255,
              "nodeType": "StructuredDocumentation",
              "src": "16035:231:160",
              "text": " @dev Burns stable debt tokens of an user\n @param account The user getting his debt burned\n @param amount The amount being burned\n @param oldTotalSupply The total supply before the burning event*"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_burn",
            "nameLocation": "16281:5:160",
            "parameters": {
              "id": 71262,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 71257,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "16305:7:160",
                  "nodeType": "VariableDeclaration",
                  "scope": 71312,
                  "src": "16297:15:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 71256,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16297:7:160",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 71259,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "16331:6:160",
                  "nodeType": "VariableDeclaration",
                  "scope": 71312,
                  "src": "16323:14:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 71258,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16323:7:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 71261,
                  "mutability": "mutable",
                  "name": "oldTotalSupply",
                  "nameLocation": "16356:14:160",
                  "nodeType": "VariableDeclaration",
                  "scope": 71312,
                  "src": "16348:22:160",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 71260,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16348:7:160",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16286:91:160"
            },
            "returnParameters": {
              "id": 71263,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16387:0:160"
            },
            "scope": 71313,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 70357,
              "name": "IStableDebtToken",
              "nameLocations": [
                "1355:16:160"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 48707,
              "src": "1355:16:160"
            },
            "id": 70358,
            "nodeType": "InheritanceSpecifier",
            "src": "1355:16:160"
          },
          {
            "baseName": {
              "id": 70359,
              "name": "DebtTokenBase",
              "nameLocations": [
                "1373:13:160"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 72045,
              "src": "1373:13:160"
            },
            "id": 70360,
            "nodeType": "InheritanceSpecifier",
            "src": "1373:13:160"
          }
        ],
        "canonicalName": "StableDebtToken",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 70356,
          "nodeType": "StructuredDocumentation",
          "src": "1084:243:160",
          "text": "@title StableDebtToken\n @author FluidNFT\n @notice Allows for the tracking of debt for the purposes of APY calculations\n at a stable rate mode.\n @dev Debt tokens are non-transferable and so diverge from the ERC20 standard."
        },
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          71313,
          72045,
          47120,
          72276,
          27111,
          27214,
          27189,
          28988,
          26136,
          48707,
          47494
        ],
        "name": "StableDebtToken",
        "nameLocation": "1336:15:160",
        "scope": 71314,
        "usedErrors": []
      }
    ],
    "license": "AGPL-3.0"
  },
  "id": 160
}
```

</details>

<details>

<summary>VariableDebtToken ABI</summary>

```
{
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "fromUser",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "toUser",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "BorrowAllowanceDelegated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "Burn",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "underlyingCollateral",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "underlyingAsset",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "pool",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "incentivesController",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "debtTokenDecimals",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "debtTokenName",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "debtTokenSymbol",
          "type": "string"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "Mint",
      "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": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "POOL",
      "outputs": [
        {
          "internalType": "contract ILendingPool",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "UNDERLYING_ASSET_ADDRESS",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "delegatee",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approveDelegation",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "fromUser",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "toUser",
          "type": "address"
        }
      ],
      "name": "borrowAllowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "subtractedValue",
          "type": "uint256"
        }
      ],
      "name": "decreaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getPoolIncentivesController",
      "outputs": [
        {
          "internalType": "contract IPoolIncentivesController",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "getScaledUserBalanceAndSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "addedValue",
          "type": "uint256"
        }
      ],
      "name": "increaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "addressProvider",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "underlyingCollateral",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "underlyingAsset",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "underlyingMaxTokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "underlyingMinTokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "debtTokenDecimals",
          "type": "uint8"
        },
        {
          "internalType": "string",
          "name": "debtTokenName",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "debtTokenSymbol",
          "type": "string"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "initiator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "onBehalfOf",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "scaledBalanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "scaledTotalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x608060405234801561001057600080fd5b5061001961001e565b6100de565b600054610100900460ff161561008a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156100dc576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61188a806100ed6000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c806370a08231116100b8578063b16a19de1161007c578063b16a19de146102cd578063b1bf962d146102de578063b3f1c93d146102e6578063c04a8a10146102f9578063dd62ed3e1461030c578063f5298aca1461031a57600080fd5b806370a082311461029c5780637535d246146102af57806395d89b41146102b7578063a457c2d714610250578063a9059cbb146102bf57600080fd5b80631da24f3e1161010a5780631da24f3e146102005780631e5fa51f1461021357806323b872dd14610228578063313ce5671461023b57806339509351146102505780636bd76d241461026357600080fd5b806306fdde0314610147578063095ea7b3146101655780630afbcdc91461018857806318160ddd146101ca57806319ef9268146101e0575b600080fd5b61014f61032d565b60405161015c91906112d0565b60405180910390f35b6101786101733660046112fb565b6103bf565b604051901515815260200161015c565b6101b5610196366004611327565b6001600160a01b03166000908152603360205260409020546035549091565b6040805192835260208301919091520161015c565b6101d2610408565b60405190815260200161015c565b6101e861051c565b6040516001600160a01b03909116815260200161015c565b6101d261020e366004611327565b61052b565b6102266102213660046113e7565b61054b565b005b6101786102363660046114af565b610717565b60655460405160ff909116815260200161015c565b61017861025e3660046112fb565b61075b565b6101d26102713660046114f0565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b6101d26102aa366004611327565b6107a6565b6101e86108e3565b61014f6108ed565b6101786102363660046112fb565b6069546001600160a01b03166101e8565b6101d26108fc565b6101786102f4366004611529565b610907565b6102266103073660046112fb565b610b02565b6101d261025e3660046114f0565b61017861032836600461156f565b610b79565b60606036805461033c906115a4565b80601f0160208091040260200160405190810160405280929190818152602001828054610368906115a4565b80156103b55780601f1061038a576101008083540402835291602001916103b5565b820191906000526020600020905b81548152906001019060200180831161039857829003601f168201915b5050505050905090565b60405162461bcd60e51b81526020600482015260166024820152751054141493d5905317d393d517d4d5541413d495115160521b60448201526000906064015b60405180910390fd5b600080610413610ca2565b606854606954606a54606b546040516352120e2360e01b81526001600160a01b0394851660048201529284166024840152604483019190915260648201529192506105169190831690639034c18c9082906352120e2390608401602060405180830381865afa15801561048a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ae91906115de565b6040518263ffffffff1660e01b81526004016104cc91815260200190565b602060405180830381865afa1580156104e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050d91906115de565b60355490610d10565b91505090565b6000610526610d59565b905090565b6001600160a01b0381166000908152603360205260408120545b92915050565b600054610100900460ff161580801561056b5750600054600160ff909116105b806105855750303b158015610585575060005460ff166001145b6105e85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016103ff565b6000805460ff19166001179055801561060b576000805461ff0019166101001790555b610616838386610da3565b606780546001600160a01b03808c166001600160a01b031992831617909255606880548b841690831617905560698054928a1692909116919091179055606a869055606b859055610665610ca2565b6001600160a01b0316876001600160a01b0316896001600160a01b03167fd59b5facb5e38ab634162423aec2545750f69daf91fe145954e2a2b449597d4c6106ab610d59565b8888886040516106be94939291906115f7565b60405180910390a4801561070c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b60405162461bcd60e51b81526020600482015260166024820152751514905394d1915497d393d517d4d5541413d495115160521b60448201526000906064016103ff565b60405162461bcd60e51b815260206004820152601760248201527f414c4c4f57414e43455f4e4f545f535550504f5254454400000000000000000060448201526000906064016103ff565b6001600160a01b038116600090815260336020526040812054806000036107d05750600092915050565b60006107da610ca2565b606854606954606a54606b546040516352120e2360e01b81526001600160a01b0394851660048201529284166024840152604483019190915260648201529192506108db9190831690639034c18c9082906352120e2390608401602060405180830381865afa158015610851573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087591906115de565b6040518263ffffffff1660e01b815260040161089391815260200190565b602060405180830381865afa1580156108b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d491906115de565b8390610d10565b949350505050565b6000610526610ca2565b60606037805461033c906115a4565b600061052660355490565b6000610911610ca2565b6001600160a01b0316336001600160a01b0316146040518060400160405280600381526020016203530360ec1b8152509061095f5760405162461bcd60e51b81526004016103ff91906112d0565b50836001600160a01b0316856001600160a01b031614158015610a0a5750606760009054906101000a90046001600160a01b03166001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f49190611641565b6001600160a01b0316856001600160a01b031614155b15610a1a57610a1a848685610dc5565b6001600160a01b03841660009081526033602052604081205490610a3e8585610ee5565b60408051808201909152600381526235303160e81b602082015290915081610a795760405162461bcd60e51b81526004016103ff91906112d0565b50610a848682610f19565b6040518581526001600160a01b038716906000906000805160206118358339815191529060200160405180910390a360408051868152602081018690526001600160a01b038816917f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a2501595945050505050565b3360008181526066602090815260408083206001600160a01b038781168086529190935292208490556069549192917fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e19116604080516001600160a01b039092168252602082018690520160405180910390a35050565b6000610b83610ca2565b6001600160a01b0316336001600160a01b0316146040518060400160405280600381526020016203530360ec1b81525090610bd15760405162461bcd60e51b81526004016103ff91906112d0565b506000610bde8484610ee5565b6040805180820190915260038152621a981960e91b602082015290915081610c195760405162461bcd60e51b81526004016103ff91906112d0565b50610c248582610fe5565b6040518481526000906001600160a01b038716906000805160206118358339815191529060200160405180910390a360408051858152602081018590526001600160a01b038716917f49995e5dd6158cf69ad3e9777c46755a1a826a446c6416992167462dad033b2a910160405180910390a2506001949350505050565b60675460408051630261bf8b60e01b815290516000926001600160a01b031691630261bf8b9160048083019260209291908290030181865afa158015610cec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105269190611641565b6000610d526b033b2e3c9fd0803ce8000000610d4c610d2f868661101f565b610d4660026b033b2e3c9fd0803ce8000000611674565b9061102b565b90611037565b9392505050565b6067546040805163033df24d60e31b815290516000926001600160a01b0316916319ef92689160048083019260209291908290030181865afa158015610cec573d6000803e3d6000fd5b610dad8383611043565b6065805460ff191660ff929092169190911790555050565b6001600160a01b038084166000908152606660209081526040808320938616835292815290829020548251808401909352600383526235303360e81b91830191909152821115610e285760405162461bcd60e51b81526004016103ff91906112d0565b506001600160a01b038084166000908152606660209081526040808320938616835292905290812054610e5c908390611696565b6001600160a01b038086166000818152606660209081526040808320948916808452949091529020839055919250907fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e1610ebe6069546001600160a01b031690565b604080516001600160a01b039092168252602082018690520160405180910390a350505050565b600080610ef3600284611674565b90506108db83610d4c610f12876b033b2e3c9fd0803ce800000061101f565b849061102b565b6000610f2460355490565b90506000610f47846001600160a01b031660009081526033602052604090205490565b9050610f538484611078565b6000610f5d610d59565b6001600160a01b031614610fdf57610f73610d59565b6040516318c39f1760e11b81526001600160a01b038681166004830152602482018590526044820184905291909116906331873e2e90606401600060405180830381600087803b158015610fc657600080fd5b505af1158015610fda573d6000803e3d6000fd5b505050505b50505050565b6000610ff060355490565b90506000611013846001600160a01b031660009081526033602052604090205490565b9050610f538484611127565b6000610d5282846116a9565b6000610d5282846116c8565b6000610d528284611674565b600054610100900460ff1661106a5760405162461bcd60e51b81526004016103ff906116db565b611074828261124a565b5050565b6001600160a01b0382166110ce5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016103ff565b80603560008282546110e091906116c8565b90915550506001600160a01b038216600081815260336020908152604080832080548601905551848152600080516020611835833981519152910160405180910390a35050565b6001600160a01b0382166111875760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016103ff565b6001600160a01b038216600090815260336020526040902054818110156111fb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016103ff565b6001600160a01b0383166000818152603360209081526040808320868603905560358054879003905551858152919291600080516020611835833981519152910160405180910390a35b505050565b600054610100900460ff166112715760405162461bcd60e51b81526004016103ff906116db565b603661127d8382611774565b5060376112458282611774565b6000815180845260005b818110156112b057602081850181015186830182015201611294565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610d52602083018461128a565b6001600160a01b03811681146112f857600080fd5b50565b6000806040838503121561130e57600080fd5b8235611319816112e3565b946020939093013593505050565b60006020828403121561133957600080fd5b8135610d52816112e3565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261136b57600080fd5b813567ffffffffffffffff8082111561138657611386611344565b604051601f8301601f19908116603f011681019082821181831017156113ae576113ae611344565b816040528381528660208588010111156113c757600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600080600080610100898b03121561140457600080fd5b883561140f816112e3565b9750602089013561141f816112e3565b9650604089013561142f816112e3565b9550606089013594506080890135935060a089013560ff8116811461145357600080fd5b925060c089013567ffffffffffffffff8082111561147057600080fd5b61147c8c838d0161135a565b935060e08b013591508082111561149257600080fd5b5061149f8b828c0161135a565b9150509295985092959890939650565b6000806000606084860312156114c457600080fd5b83356114cf816112e3565b925060208401356114df816112e3565b929592945050506040919091013590565b6000806040838503121561150357600080fd5b823561150e816112e3565b9150602083013561151e816112e3565b809150509250929050565b6000806000806080858703121561153f57600080fd5b843561154a816112e3565b9350602085013561155a816112e3565b93969395505050506040820135916060013590565b60008060006060848603121561158457600080fd5b833561158f816112e3565b95602085013595506040909401359392505050565b600181811c908216806115b857607f821691505b6020821081036115d857634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156115f057600080fd5b5051919050565b6001600160a01b038516815260ff841660208201526080604082018190526000906116249083018561128a565b8281036060840152611636818561128a565b979650505050505050565b60006020828403121561165357600080fd5b8151610d52816112e3565b634e487b7160e01b600052601160045260246000fd5b60008261169157634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156105455761054561165e565b60008160001904831182151516156116c3576116c361165e565b500290565b808201808211156105455761054561165e565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b601f82111561124557600081815260208120601f850160051c8101602086101561174d5750805b601f850160051c820191505b8181101561176c57828155600101611759565b505050505050565b815167ffffffffffffffff81111561178e5761178e611344565b6117a28161179c84546115a4565b84611726565b602080601f8311600181146117d757600084156117bf5750858301515b600019600386901b1c1916600185901b17855561176c565b600085815260208120601f198616915b82811015611806578886015182559484019460019091019084016117e7565b50858210156118245787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212200719044032272a1f6566b96c0260dd65524538ce6334db9105e9aaed2e5a4b8764736f6c63430008100033",
    "sourceMap": "1194:7714:161:-:0;;;1588:55;;;;;;;;;-1:-1:-1;1613:22:161;:20;:22::i;:::-;1194:7714;;5928:279:18;5996:13;;;;;;;5995:14;5987:66;;;;-1:-1:-1;;;5987:66:18;;216:2:187;5987:66:18;;;198:21:187;255:2;235:18;;;228:30;294:34;274:18;;;267:62;-1:-1:-1;;;345:18:187;;;338:37;392:19;;5987:66:18;;;;;;;;6067:12;;6082:15;6067:12;;;:30;6063:138;;;6113:12;:30;;-1:-1:-1;;6113:30:18;6128:15;6113:30;;;;;;6162:28;;564:36:187;;;6162:28:18;;552:2:187;537:18;6162:28:18;;;;;;;6063:138;5928:279::o;422:184:187:-;1194:7714:161;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x608060405234801561001057600080fd5b50600436106101425760003560e01c806370a08231116100b8578063b16a19de1161007c578063b16a19de146102cd578063b1bf962d146102de578063b3f1c93d146102e6578063c04a8a10146102f9578063dd62ed3e1461030c578063f5298aca1461031a57600080fd5b806370a082311461029c5780637535d246146102af57806395d89b41146102b7578063a457c2d714610250578063a9059cbb146102bf57600080fd5b80631da24f3e1161010a5780631da24f3e146102005780631e5fa51f1461021357806323b872dd14610228578063313ce5671461023b57806339509351146102505780636bd76d241461026357600080fd5b806306fdde0314610147578063095ea7b3146101655780630afbcdc91461018857806318160ddd146101ca57806319ef9268146101e0575b600080fd5b61014f61032d565b60405161015c91906112d0565b60405180910390f35b6101786101733660046112fb565b6103bf565b604051901515815260200161015c565b6101b5610196366004611327565b6001600160a01b03166000908152603360205260409020546035549091565b6040805192835260208301919091520161015c565b6101d2610408565b60405190815260200161015c565b6101e861051c565b6040516001600160a01b03909116815260200161015c565b6101d261020e366004611327565b61052b565b6102266102213660046113e7565b61054b565b005b6101786102363660046114af565b610717565b60655460405160ff909116815260200161015c565b61017861025e3660046112fb565b61075b565b6101d26102713660046114f0565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b6101d26102aa366004611327565b6107a6565b6101e86108e3565b61014f6108ed565b6101786102363660046112fb565b6069546001600160a01b03166101e8565b6101d26108fc565b6101786102f4366004611529565b610907565b6102266103073660046112fb565b610b02565b6101d261025e3660046114f0565b61017861032836600461156f565b610b79565b60606036805461033c906115a4565b80601f0160208091040260200160405190810160405280929190818152602001828054610368906115a4565b80156103b55780601f1061038a576101008083540402835291602001916103b5565b820191906000526020600020905b81548152906001019060200180831161039857829003601f168201915b5050505050905090565b60405162461bcd60e51b81526020600482015260166024820152751054141493d5905317d393d517d4d5541413d495115160521b60448201526000906064015b60405180910390fd5b600080610413610ca2565b606854606954606a54606b546040516352120e2360e01b81526001600160a01b0394851660048201529284166024840152604483019190915260648201529192506105169190831690639034c18c9082906352120e2390608401602060405180830381865afa15801561048a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ae91906115de565b6040518263ffffffff1660e01b81526004016104cc91815260200190565b602060405180830381865afa1580156104e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050d91906115de565b60355490610d10565b91505090565b6000610526610d59565b905090565b6001600160a01b0381166000908152603360205260408120545b92915050565b600054610100900460ff161580801561056b5750600054600160ff909116105b806105855750303b158015610585575060005460ff166001145b6105e85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016103ff565b6000805460ff19166001179055801561060b576000805461ff0019166101001790555b610616838386610da3565b606780546001600160a01b03808c166001600160a01b031992831617909255606880548b841690831617905560698054928a1692909116919091179055606a869055606b859055610665610ca2565b6001600160a01b0316876001600160a01b0316896001600160a01b03167fd59b5facb5e38ab634162423aec2545750f69daf91fe145954e2a2b449597d4c6106ab610d59565b8888886040516106be94939291906115f7565b60405180910390a4801561070c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b60405162461bcd60e51b81526020600482015260166024820152751514905394d1915497d393d517d4d5541413d495115160521b60448201526000906064016103ff565b60405162461bcd60e51b815260206004820152601760248201527f414c4c4f57414e43455f4e4f545f535550504f5254454400000000000000000060448201526000906064016103ff565b6001600160a01b038116600090815260336020526040812054806000036107d05750600092915050565b60006107da610ca2565b606854606954606a54606b546040516352120e2360e01b81526001600160a01b0394851660048201529284166024840152604483019190915260648201529192506108db9190831690639034c18c9082906352120e2390608401602060405180830381865afa158015610851573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087591906115de565b6040518263ffffffff1660e01b815260040161089391815260200190565b602060405180830381865afa1580156108b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d491906115de565b8390610d10565b949350505050565b6000610526610ca2565b60606037805461033c906115a4565b600061052660355490565b6000610911610ca2565b6001600160a01b0316336001600160a01b0316146040518060400160405280600381526020016203530360ec1b8152509061095f5760405162461bcd60e51b81526004016103ff91906112d0565b50836001600160a01b0316856001600160a01b031614158015610a0a5750606760009054906101000a90046001600160a01b03166001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f49190611641565b6001600160a01b0316856001600160a01b031614155b15610a1a57610a1a848685610dc5565b6001600160a01b03841660009081526033602052604081205490610a3e8585610ee5565b60408051808201909152600381526235303160e81b602082015290915081610a795760405162461bcd60e51b81526004016103ff91906112d0565b50610a848682610f19565b6040518581526001600160a01b038716906000906000805160206118358339815191529060200160405180910390a360408051868152602081018690526001600160a01b038816917f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a2501595945050505050565b3360008181526066602090815260408083206001600160a01b038781168086529190935292208490556069549192917fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e19116604080516001600160a01b039092168252602082018690520160405180910390a35050565b6000610b83610ca2565b6001600160a01b0316336001600160a01b0316146040518060400160405280600381526020016203530360ec1b81525090610bd15760405162461bcd60e51b81526004016103ff91906112d0565b506000610bde8484610ee5565b6040805180820190915260038152621a981960e91b602082015290915081610c195760405162461bcd60e51b81526004016103ff91906112d0565b50610c248582610fe5565b6040518481526000906001600160a01b038716906000805160206118358339815191529060200160405180910390a360408051858152602081018590526001600160a01b038716917f49995e5dd6158cf69ad3e9777c46755a1a826a446c6416992167462dad033b2a910160405180910390a2506001949350505050565b60675460408051630261bf8b60e01b815290516000926001600160a01b031691630261bf8b9160048083019260209291908290030181865afa158015610cec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105269190611641565b6000610d526b033b2e3c9fd0803ce8000000610d4c610d2f868661101f565b610d4660026b033b2e3c9fd0803ce8000000611674565b9061102b565b90611037565b9392505050565b6067546040805163033df24d60e31b815290516000926001600160a01b0316916319ef92689160048083019260209291908290030181865afa158015610cec573d6000803e3d6000fd5b610dad8383611043565b6065805460ff191660ff929092169190911790555050565b6001600160a01b038084166000908152606660209081526040808320938616835292815290829020548251808401909352600383526235303360e81b91830191909152821115610e285760405162461bcd60e51b81526004016103ff91906112d0565b506001600160a01b038084166000908152606660209081526040808320938616835292905290812054610e5c908390611696565b6001600160a01b038086166000818152606660209081526040808320948916808452949091529020839055919250907fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e1610ebe6069546001600160a01b031690565b604080516001600160a01b039092168252602082018690520160405180910390a350505050565b600080610ef3600284611674565b90506108db83610d4c610f12876b033b2e3c9fd0803ce800000061101f565b849061102b565b6000610f2460355490565b90506000610f47846001600160a01b031660009081526033602052604090205490565b9050610f538484611078565b6000610f5d610d59565b6001600160a01b031614610fdf57610f73610d59565b6040516318c39f1760e11b81526001600160a01b038681166004830152602482018590526044820184905291909116906331873e2e90606401600060405180830381600087803b158015610fc657600080fd5b505af1158015610fda573d6000803e3d6000fd5b505050505b50505050565b6000610ff060355490565b90506000611013846001600160a01b031660009081526033602052604090205490565b9050610f538484611127565b6000610d5282846116a9565b6000610d5282846116c8565b6000610d528284611674565b600054610100900460ff1661106a5760405162461bcd60e51b81526004016103ff906116db565b611074828261124a565b5050565b6001600160a01b0382166110ce5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016103ff565b80603560008282546110e091906116c8565b90915550506001600160a01b038216600081815260336020908152604080832080548601905551848152600080516020611835833981519152910160405180910390a35050565b6001600160a01b0382166111875760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016103ff565b6001600160a01b038216600090815260336020526040902054818110156111fb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016103ff565b6001600160a01b0383166000818152603360209081526040808320868603905560358054879003905551858152919291600080516020611835833981519152910160405180910390a35b505050565b600054610100900460ff166112715760405162461bcd60e51b81526004016103ff906116db565b603661127d8382611774565b5060376112458282611774565b6000815180845260005b818110156112b057602081850181015186830182015201611294565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610d52602083018461128a565b6001600160a01b03811681146112f857600080fd5b50565b6000806040838503121561130e57600080fd5b8235611319816112e3565b946020939093013593505050565b60006020828403121561133957600080fd5b8135610d52816112e3565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261136b57600080fd5b813567ffffffffffffffff8082111561138657611386611344565b604051601f8301601f19908116603f011681019082821181831017156113ae576113ae611344565b816040528381528660208588010111156113c757600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600080600080610100898b03121561140457600080fd5b883561140f816112e3565b9750602089013561141f816112e3565b9650604089013561142f816112e3565b9550606089013594506080890135935060a089013560ff8116811461145357600080fd5b925060c089013567ffffffffffffffff8082111561147057600080fd5b61147c8c838d0161135a565b935060e08b013591508082111561149257600080fd5b5061149f8b828c0161135a565b9150509295985092959890939650565b6000806000606084860312156114c457600080fd5b83356114cf816112e3565b925060208401356114df816112e3565b929592945050506040919091013590565b6000806040838503121561150357600080fd5b823561150e816112e3565b9150602083013561151e816112e3565b809150509250929050565b6000806000806080858703121561153f57600080fd5b843561154a816112e3565b9350602085013561155a816112e3565b93969395505050506040820135916060013590565b60008060006060848603121561158457600080fd5b833561158f816112e3565b95602085013595506040909401359392505050565b600181811c908216806115b857607f821691505b6020821081036115d857634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156115f057600080fd5b5051919050565b6001600160a01b038516815260ff841660208201526080604082018190526000906116249083018561128a565b8281036060840152611636818561128a565b979650505050505050565b60006020828403121561165357600080fd5b8151610d52816112e3565b634e487b7160e01b600052601160045260246000fd5b60008261169157634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156105455761054561165e565b60008160001904831182151516156116c3576116c361165e565b500290565b808201808211156105455761054561165e565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b601f82111561124557600081815260208120601f850160051c8101602086101561174d5750805b601f850160051c820191505b8181101561176c57828155600101611759565b505050505050565b815167ffffffffffffffff81111561178e5761178e611344565b6117a28161179c84546115a4565b84611726565b602080601f8311600181146117d757600084156117bf5750858301515b600019600386901b1c1916600185901b17855561176c565b600085815260208120601f198616915b82811015611806578886015182559484019460019091019084016117e7565b50858210156118245787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212200719044032272a1f6566b96c0260dd65524538ce6334db9105e9aaed2e5a4b8764736f6c63430008100033",
    "sourceMap": "1194:7714:161:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2491:98:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2948:248:162;;;;;;:::i;:::-;;:::i;:::-;;;1288:14:187;;1281:22;1263:41;;1251:2;1236:18;2948:248:162;1123:187:187;7591:173:161;;;;;;:::i;:::-;-1:-1:-1;;;;;3843:18:23;7676:7:161;3843:18:23;;;:9;:18;;;;;;3666:12;;3843:18;;7591:173:161;;;;;1741:25:187;;;1797:2;1782:18;;1775:34;;;;1714:18;7591:173:161;1567:248:187;6603:461:161;;;:::i;:::-;;;1966:25:187;;;1954:2;1939:18;6603:461:161;1820:177:187;8065:154:161;;;:::i;:::-;;;-1:-1:-1;;;;;2201:32:187;;;2183:51;;2171:2;2156:18;8065:154:161;2002:238:187;6300:133:161;;;;;;:::i;:::-;;:::i;2332:1049::-;;;;;;:::i;:::-;;:::i;:::-;;3202:320:162;;;;;;:::i;:::-;;:::i;1025:145:163:-;1149:15;;1025:145;;1149:15;;;;4975:36:187;;4963:2;4948:18;1025:145:163;4833:184:187;3528:226:162;;;;;;:::i;:::-;;:::i;2064:195::-;;;;;;:::i;:::-;-1:-1:-1;;;;;2217:27:162;;;2187:7;2217:27;;;:17;:27;;;;;;;;:35;;;;;;;;;;;;;2064:195;5538:596:161;;;;;;:::i;:::-;;:::i;8322:94::-;;;:::i;2702:102:23:-;;;:::i;2421:253:162:-;;;;;;:::i;7861:108:161:-;7945:16;;-1:-1:-1;;;;;7945:16:161;7861:108;;7228:121;;;:::i;3731:935::-;;;;;;:::i;:::-;;:::i;1593:250:162:-;;;;;;:::i;:::-;;:::i;2680:262::-;;;;;;:::i;4934:470:161:-;;;;;;:::i;:::-;;:::i;2491:98:23:-;2545:13;2577:5;2570:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2491:98;:::o;2948:248:162:-;3157:32;;-1:-1:-1;;;3157:32:162;;7358:2:187;3157:32:162;;;7340:21:187;7397:2;7377:18;;;7370:30;-1:-1:-1;;;7416:18:187;;;7409:52;3103:4:162;;7478:18:187;;3157:32:162;;;;;;;;6603:461:161;6702:7;6722:17;6742;:15;:17::i;:::-;6892:21;;6933:16;;6968:21;;7008;;6856:188;;-1:-1:-1;;;6856:188:161;;-1:-1:-1;;;;;6892:21:161;;;6856:188;;;7776:34:187;6933:16:161;;;7826:18:187;;;7819:43;7878:18;;;7871:34;;;;7921:18;;;7914:34;6722:37:161;;-1:-1:-1;6777:279:161;;6804:37;;;;;;;;6856:17;;7710:19:187;;6856:188:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6804:251;;;;;;;;;;;;;1966:25:187;;1954:2;1939:18;;1820:177;6804:251:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3666:12:23;;6777:26:161;;:279::i;:::-;6770:286;;;6603:461;:::o;8065:154::-;8136:25;8181:30;:28;:30::i;:::-;8174:37;;8065:154;:::o;6300:133::-;-1:-1:-1;;;;;3843:18:23;;6377:7:161;3843:18:23;;;:9;:18;;;;;;6404:21:161;6397:28;6300:133;-1:-1:-1;;6300:133:161:o;2332:1049::-;3268:19:18;3291:13;;;;;;3290:14;;3336:34;;;;-1:-1:-1;3354:12:18;;3369:1;3354:12;;;;:16;3336:34;3335:108;;;-1:-1:-1;3415:4:18;1476:19:32;:23;;;3376:66:18;;-1:-1:-1;3425:12:18;;;;;:17;3376:66;3314:201;;;;-1:-1:-1;;;3314:201:18;;8350:2:187;3314:201:18;;;8332:21:187;8389:2;8369:18;;;8362:30;8428:34;8408:18;;;8401:62;-1:-1:-1;;;8479:18:187;;;8472:44;8533:19;;3314:201:18;8148:410:187;3314:201:18;3525:12;:16;;-1:-1:-1;;3525:16:18;3540:1;3525:16;;;3551:65;;;;3585:13;:20;;-1:-1:-1;;3585:20:18;;;;;3551:65;2731:75:161::1;2756:13;2771:15;2788:17;2731:24;:75::i;:::-;2819:16;:52:::0;;-1:-1:-1;;;;;2819:52:161;;::::1;-1:-1:-1::0;;;;;;2819:52:161;;::::1;;::::0;;;2884:21:::1;:44:::0;;;;::::1;::::0;;::::1;;::::0;;2939:16:::1;:34:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;2984:21:::1;:44:::0;;;3039:21:::1;:44:::0;;;3200:17:::1;:15;:17::i;:::-;-1:-1:-1::0;;;;;3101:272:161::1;3162:15;-1:-1:-1::0;;;;;3101:272:161::1;3127:20;-1:-1:-1::0;;;;;3101:272:161::1;;3241:30;:28;:30::i;:::-;3287:17;3319:13;3347:15;3101:272;;;;;;;;;:::i;:::-;;;;;;;;3640:14:18::0;3636:99;;;3686:5;3670:21;;-1:-1:-1;;3670:21:18;;;3710:14;;-1:-1:-1;4975:36:187;;3710:14:18;;4963:2:187;4948:18;3710:14:18;;;;;;;3636:99;3258:483;2332:1049:161;;;;;;;;:::o;3202:320:162:-;3483:32;;-1:-1:-1;;;3483:32:162;;9529:2:187;3483:32:162;;;9511:21:187;9568:2;9548:18;;;9541:30;-1:-1:-1;;;9587:18:187;;;9580:52;3411:4:162;;9649:18:187;;3483:32:162;9327:346:187;3528:226:162;3714:33;;-1:-1:-1;;;3714:33:162;;9880:2:187;3714:33:162;;;9862:21:187;9919:2;9899:18;;;9892:30;9958:25;9938:18;;;9931:53;3657:4:162;;10001:18:187;;3714:33:162;9678:347:187;5538:596:161;-1:-1:-1;;;;;3843:18:23;;5647:7:161;3843:18:23;;;:9;:18;;;;;;5729:13:161;5746:1;5729:18;5725:59;;-1:-1:-1;5771:1:161;;5538:596;-1:-1:-1;;5538:596:161:o;5725:59::-;5796:17;5816;:15;:17::i;:::-;5962:21;;6003:16;;6038:21;;6078;;5926:188;;-1:-1:-1;;;5926:188:161;;-1:-1:-1;;;;;5962:21:161;;;5926:188;;;7776:34:187;6003:16:161;;;7826:18:187;;;7819:43;7878:18;;;7871:34;;;;7921:18;;;7914:34;5796:37:161;;-1:-1:-1;5853:273:161;;5874:37;;;;;;;;5926:17;;7710:19:187;;5926:188:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5874:251;;;;;;;;;;;;;1966:25:187;;1954:2;1939:18;;1820:177;5874:251:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5853:13;;:20;:273::i;:::-;5846:280;5538:596;-1:-1:-1;;;;5538:596:161:o;8322:94::-;8359:12;8391:17;:15;:17::i;2702:102:23:-;2758:13;2790:7;2783:14;;;;;:::i;7228:121:161:-;7295:7;7322:19;3666:12:23;;;3579:106;3731:935:161;3941:4;1145:17:162;:15;:17::i;:::-;-1:-1:-1;;;;;1121:42:162;929:10:33;-1:-1:-1;;;;;1121:42:162;;1165:37;;;;;;;;;;;;;-1:-1:-1;;;1165:37:162;;;1113:90;;;;;-1:-1:-1;;;1113:90:162;;;;;;;;:::i;:::-;;3995:10:161::1;-1:-1:-1::0;;;;;3982:23:161::1;:9;-1:-1:-1::0;;;;;3982:23:161::1;;;:86;;;;;4035:16;;;;;;;;;-1:-1:-1::0;;;;;4035:16:161::1;-1:-1:-1::0;;;;;4035:31:161::1;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;4022:46:161::1;:9;-1:-1:-1::0;;;;;4022:46:161::1;;;3982:86;3964:198;;;4095:55;4120:10;4132:9;4143:6;4095:24;:55::i;:::-;-1:-1:-1::0;;;;;3843:18:23;;4172:23:161::1;3843:18:23::0;;;:9;:18;;;;;;;4381:20:161::1;:6:::0;4395:5;4381:13:::1;:20::i;:::-;4439:29;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;4439:29:161::1;::::0;::::1;::::0;4358:43;;-1:-1:-1;4420:17:161;4412:57:::1;;;;-1:-1:-1::0;;;4412:57:161::1;;;;;;;;:::i;:::-;;4482:31;4488:10;4500:12;4482:5;:31::i;:::-;4531:40;::::0;1966:25:187;;;-1:-1:-1;;;;;4531:40:161;::::1;::::0;4548:1:::1;::::0;-1:-1:-1;;;;;;;;;;;4531:40:161;1954:2:187;1939:18;4531:40:161::1;;;;;;;4587:31;::::0;;1741:25:187;;;1797:2;1782:18;;1775:34;;;-1:-1:-1;;;;;4587:31:161;::::1;::::0;::::1;::::0;1714:18:187;4587:31:161::1;;;;;;;-1:-1:-1::0;4638:20:161;;3731:935;-1:-1:-1;;;;;3731:935:161:o;1593:250:162:-;929:10:33;1683:31:162;;;;:17;:31;;;;;;;;-1:-1:-1;;;;;1683:42:162;;;;;;;;;;;;:51;;;7945:16:161;;1683:42:162;;929:10:33;1749:87:162;;7945:16:161;1749:87:162;;;-1:-1:-1;;;;;10478:32:187;;;10460:51;;10542:2;10527:18;;10520:34;;;10433:18;1749:87:162;;;;;;;1593:250;;:::o;4934:470:161:-;5110:4;1145:17:162;:15;:17::i;:::-;-1:-1:-1;;;;;1121:42:162;929:10:33;-1:-1:-1;;;;;1121:42:162;;1165:37;;;;;;;;;;;;;-1:-1:-1;;;1165:37:162;;;1113:90;;;;;-1:-1:-1;;;1113:90:162;;;;;;;;:::i;:::-;-1:-1:-1;5132:20:161::1;5155;:6:::0;5169:5;5155:13:::1;:20::i;:::-;5213:29;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;5213:29:161::1;::::0;::::1;::::0;5132:43;;-1:-1:-1;5194:17:161;5186:57:::1;;;;-1:-1:-1::0;;;5186:57:161::1;;;;;;;;:::i;:::-;;5256:25;5262:4;5268:12;5256:5;:25::i;:::-;5299:34;::::0;1966:25:187;;;5322:1:161::1;::::0;-1:-1:-1;;;;;5299:34:161;::::1;::::0;-1:-1:-1;;;;;;;;;;;5299:34:161;1954:2:187;1939:18;5299:34:161::1;;;;;;;5349:25;::::0;;1741::187;;;1797:2;1782:18;;1775:34;;;-1:-1:-1;;;;;5349:25:161;::::1;::::0;::::1;::::0;1714:18:187;5349:25:161::1;;;;;;;-1:-1:-1::0;5392:4:161::1;::::0;4934:470;-1:-1:-1;;;;4934:470:161:o;8759:146::-;8863:16;;:33;;;-1:-1:-1;;;8863:33:161;;;;8818:12;;-1:-1:-1;;;;;8863:16:161;;:31;;:33;;;;;;;;;;;;;;:16;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1291:126:146:-;1352:7;1379:30;524:4;1379:21;1391:8;:1;1397;1391:5;:8::i;:::-;571:7;577:1;524:4;571:7;:::i;:::-;1379:11;;:21::i;:::-;:25;;:30::i;:::-;1372:37;1291:126;-1:-1:-1;;;1291:126:146:o;8424:198:161:-;8567:16;;:46;;;-1:-1:-1;;;8567:46:161;;;;8496:25;;-1:-1:-1;;;;;8567:16:161;;:44;;:46;;;;;;;;;;;;;;:16;:46;;;;;;;;;;;;;;758:201:163;889:28;902:5;909:7;889:12;:28::i;:::-;926:15;:27;;-1:-1:-1;;926:27:163;;;;;;;;;;;;-1:-1:-1;;758:201:163:o;4002:501:162:-;-1:-1:-1;;;;;4147:28:162;;;;;;;:17;:28;;;;;;;;:39;;;;;;;;;;;;;4198:37;;;;;;;;;;;-1:-1:-1;;;4198:37:162;;;;;;;4147:49;-1:-1:-1;4147:49:162;4139:97;;;;-1:-1:-1;;;4139:97:162;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;4278:28:162;;;4255:20;4278:28;;;:17;:28;;;;;;;;:39;;;;;;;;;;;;:48;;4320:6;;4278:48;:::i;:::-;-1:-1:-1;;;;;4336:28:162;;;;;;;:17;:28;;;;;;;;:39;;;;;;;;;;;;:54;;;4255:71;;-1:-1:-1;4336:39:162;4406:90;4453:28;7945:16:161;;-1:-1:-1;;;;;7945:16:161;;7861:108;4453:28:162;4406:90;;;-1:-1:-1;;;;;10478:32:187;;;10460:51;;10542:2;10527:18;;10520:34;;;10433:18;4406:90:162;;;;;;;4129:374;4002:501;;;:::o;1425:158:146:-;1486:7;;1522:5;1526:1;1522;:5;:::i;:::-;1506:21;-1:-1:-1;1547:28:146;1573:1;1547:21;1557:10;:1;524:4;1557:5;:10::i;:::-;1547:5;;:9;:21::i;2233:398:163:-;2314:22;2339:19;3666:12:23;;;3579:106;2339:19:163;2314:44;;2365:25;2393:24;2409:7;-1:-1:-1;;;;;3843:18:23;3817:7;3843:18;;;:9;:18;;;;;;;3743:125;2393:24:163;2365:52;;2426:28;2438:7;2447:6;2426:11;:28::i;:::-;2518:1;2475:30;:28;:30::i;:::-;-1:-1:-1;;;;;2467:53:163;;2463:163;;2531:30;:28;:30::i;:::-;:87;;-1:-1:-1;;;2531:87:163;;-1:-1:-1;;;;;11272:32:187;;;2531:87:163;;;11254:51:187;11321:18;;;11314:34;;;11364:18;;;11357:34;;;2531:43:163;;;;;;;11227:18:187;;2531:87:163;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2463:163;2307:324;;2233:398;;:::o;2637:::-;2718:22;2743:19;3666:12:23;;;3579:106;2743:19:163;2718:44;;2769:25;2797:24;2813:7;-1:-1:-1;;;;;3843:18:23;3817:7;3843:18;;;:9;:18;;;;;;;3743:125;2797:24:163;2769:52;;2830:28;2842:7;2851:6;2830:11;:28::i;3465:96:71:-;3523:7;3549:5;3553:1;3549;:5;:::i;2755:96::-;2813:7;2839:5;2843:1;2839;:5;:::i;3850:96::-;3908:7;3934:5;3938:1;3934;:5;:::i;2114:147:23:-;5363:13:18;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:18;;;;;;;:::i;:::-;2216:38:23::1;2239:5;2246:7;2216:22;:38::i;:::-;2114:147:::0;;:::o;8904:535::-;-1:-1:-1;;;;;8987:21:23;;8979:65;;;;-1:-1:-1;;;8979:65:23;;12319:2:187;8979:65:23;;;12301:21:187;12358:2;12338:18;;;12331:30;12397:33;12377:18;;;12370:61;12448:18;;8979:65:23;12117:355:187;8979:65:23;9131:6;9115:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;9283:18:23;;;;;;:9;:18;;;;;;;;:28;;;;;;9336:37;1966:25:187;;;-1:-1:-1;;;;;;;;;;;9336:37:23;1939:18:187;9336:37:23;;;;;;;2114:147;;:::o;9759:659::-;-1:-1:-1;;;;;9842:21:23;;9834:67;;;;-1:-1:-1;;;9834:67:23;;12679:2:187;9834:67:23;;;12661:21:187;12718:2;12698:18;;;12691:30;12757:34;12737:18;;;12730:62;-1:-1:-1;;;12808:18:187;;;12801:31;12849:19;;9834:67:23;12477:397:187;9834:67:23;-1:-1:-1;;;;;9997:18:23;;9972:22;9997:18;;;:9;:18;;;;;;10033:24;;;;10025:71;;;;-1:-1:-1;;;10025:71:23;;13081:2:187;10025:71:23;;;13063:21:187;13120:2;13100:18;;;13093:30;13159:34;13139:18;;;13132:62;-1:-1:-1;;;13210:18:187;;;13203:32;13252:19;;10025:71:23;12879:398:187;10025:71:23;-1:-1:-1;;;;;10130:18:23;;;;;;:9;:18;;;;;;;;10151:23;;;10130:44;;10267:12;:22;;;;;;;10315:37;1966:25:187;;;10130:18:23;;;-1:-1:-1;;;;;;;;;;;10315:37:23;1939:18:187;10315:37:23;;;;;;;10363:48;9824:594;9759:659;;:::o;2267:159::-;5363:13:18;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:18;;;;;;;:::i;:::-;2379:5:23::1;:13;2387:5:::0;2379;:13:::1;:::i;:::-;-1:-1:-1::0;2402:7:23::1;:17;2412:7:::0;2402;:17:::1;:::i;14:423:187:-:0;56:3;94:5;88:12;121:6;116:3;109:19;146:1;156:162;170:6;167:1;164:13;156:162;;;232:4;288:13;;;284:22;;278:29;260:11;;;256:20;;249:59;185:12;156:162;;;160:3;363:1;356:4;347:6;342:3;338:16;334:27;327:38;426:4;419:2;415:7;410:2;402:6;398:15;394:29;389:3;385:39;381:50;374:57;;;14:423;;;;:::o;442:220::-;591:2;580:9;573:21;554:4;611:45;652:2;641:9;637:18;629:6;611:45;:::i;667:131::-;-1:-1:-1;;;;;742:31:187;;732:42;;722:70;;788:1;785;778:12;722:70;667:131;:::o;803:315::-;871:6;879;932:2;920:9;911:7;907:23;903:32;900:52;;;948:1;945;938:12;900:52;987:9;974:23;1006:31;1031:5;1006:31;:::i;:::-;1056:5;1108:2;1093:18;;;;1080:32;;-1:-1:-1;;;803:315:187:o;1315:247::-;1374:6;1427:2;1415:9;1406:7;1402:23;1398:32;1395:52;;;1443:1;1440;1433:12;1395:52;1482:9;1469:23;1501:31;1526:5;1501:31;:::i;2245:127::-;2306:10;2301:3;2297:20;2294:1;2287:31;2337:4;2334:1;2327:15;2361:4;2358:1;2351:15;2377:719;2420:5;2473:3;2466:4;2458:6;2454:17;2450:27;2440:55;;2491:1;2488;2481:12;2440:55;2527:6;2514:20;2553:18;2590:2;2586;2583:10;2580:36;;;2596:18;;:::i;:::-;2671:2;2665:9;2639:2;2725:13;;-1:-1:-1;;2721:22:187;;;2745:2;2717:31;2713:40;2701:53;;;2769:18;;;2789:22;;;2766:46;2763:72;;;2815:18;;:::i;:::-;2855:10;2851:2;2844:22;2890:2;2882:6;2875:18;2936:3;2929:4;2924:2;2916:6;2912:15;2908:26;2905:35;2902:55;;;2953:1;2950;2943:12;2902:55;3017:2;3010:4;3002:6;2998:17;2991:4;2983:6;2979:17;2966:54;3064:1;3057:4;3052:2;3044:6;3040:15;3036:26;3029:37;3084:6;3075:15;;;;;;2377:719;;;;:::o;3101:1266::-;3241:6;3249;3257;3265;3273;3281;3289;3297;3350:3;3338:9;3329:7;3325:23;3321:33;3318:53;;;3367:1;3364;3357:12;3318:53;3406:9;3393:23;3425:31;3450:5;3425:31;:::i;:::-;3475:5;-1:-1:-1;3532:2:187;3517:18;;3504:32;3545:33;3504:32;3545:33;:::i;:::-;3597:7;-1:-1:-1;3656:2:187;3641:18;;3628:32;3669:33;3628:32;3669:33;:::i;:::-;3721:7;-1:-1:-1;3775:2:187;3760:18;;3747:32;;-1:-1:-1;3826:3:187;3811:19;;3798:33;;-1:-1:-1;3883:3:187;3868:19;;3855:33;3932:4;3919:18;;3907:31;;3897:59;;3952:1;3949;3942:12;3897:59;3975:7;-1:-1:-1;4033:3:187;4018:19;;4005:33;4057:18;4087:14;;;4084:34;;;4114:1;4111;4104:12;4084:34;4137:50;4179:7;4170:6;4159:9;4155:22;4137:50;:::i;:::-;4127:60;;4240:3;4229:9;4225:19;4212:33;4196:49;;4270:2;4260:8;4257:16;4254:36;;;4286:1;4283;4276:12;4254:36;;4309:52;4353:7;4342:8;4331:9;4327:24;4309:52;:::i;:::-;4299:62;;;3101:1266;;;;;;;;;;;:::o;4372:456::-;4449:6;4457;4465;4518:2;4506:9;4497:7;4493:23;4489:32;4486:52;;;4534:1;4531;4524:12;4486:52;4573:9;4560:23;4592:31;4617:5;4592:31;:::i;:::-;4642:5;-1:-1:-1;4699:2:187;4684:18;;4671:32;4712:33;4671:32;4712:33;:::i;:::-;4372:456;;4764:7;;-1:-1:-1;;;4818:2:187;4803:18;;;;4790:32;;4372:456::o;5022:388::-;5090:6;5098;5151:2;5139:9;5130:7;5126:23;5122:32;5119:52;;;5167:1;5164;5157:12;5119:52;5206:9;5193:23;5225:31;5250:5;5225:31;:::i;:::-;5275:5;-1:-1:-1;5332:2:187;5317:18;;5304:32;5345:33;5304:32;5345:33;:::i;:::-;5397:7;5387:17;;;5022:388;;;;;:::o;5853:525::-;5939:6;5947;5955;5963;6016:3;6004:9;5995:7;5991:23;5987:33;5984:53;;;6033:1;6030;6023:12;5984:53;6072:9;6059:23;6091:31;6116:5;6091:31;:::i;:::-;6141:5;-1:-1:-1;6198:2:187;6183:18;;6170:32;6211:33;6170:32;6211:33;:::i;:::-;5853:525;;6263:7;;-1:-1:-1;;;;6317:2:187;6302:18;;6289:32;;6368:2;6353:18;6340:32;;5853:525::o;6383:383::-;6460:6;6468;6476;6529:2;6517:9;6508:7;6504:23;6500:32;6497:52;;;6545:1;6542;6535:12;6497:52;6584:9;6571:23;6603:31;6628:5;6603:31;:::i;:::-;6653:5;6705:2;6690:18;;6677:32;;-1:-1:-1;6756:2:187;6741:18;;;6728:32;;6383:383;-1:-1:-1;;;6383:383:187:o;6771:380::-;6850:1;6846:12;;;;6893;;;6914:61;;6968:4;6960:6;6956:17;6946:27;;6914:61;7021:2;7013:6;7010:14;6990:18;6987:38;6984:161;;7067:10;7062:3;7058:20;7055:1;7048:31;7102:4;7099:1;7092:15;7130:4;7127:1;7120:15;6984:161;;6771:380;;;:::o;7959:184::-;8029:6;8082:2;8070:9;8061:7;8057:23;8053:32;8050:52;;;8098:1;8095;8088:12;8050:52;-1:-1:-1;8121:16:187;;7959:184;-1:-1:-1;7959:184:187:o;8563:560::-;-1:-1:-1;;;;;8812:32:187;;8794:51;;8893:4;8881:17;;8876:2;8861:18;;8854:45;8935:3;8930:2;8915:18;;8908:31;;;-1:-1:-1;;8962:46:187;;8988:19;;8980:6;8962:46;:::i;:::-;9056:9;9048:6;9044:22;9039:2;9028:9;9024:18;9017:50;9084:33;9110:6;9102;9084:33;:::i;:::-;9076:41;8563:560;-1:-1:-1;;;;;;;8563:560:187:o;10030:251::-;10100:6;10153:2;10141:9;10132:7;10128:23;10124:32;10121:52;;;10169:1;10166;10159:12;10121:52;10201:9;10195:16;10220:31;10245:5;10220:31;:::i;10565:127::-;10626:10;10621:3;10617:20;10614:1;10607:31;10657:4;10654:1;10647:15;10681:4;10678:1;10671:15;10697:217;10737:1;10763;10753:132;;10807:10;10802:3;10798:20;10795:1;10788:31;10842:4;10839:1;10832:15;10870:4;10867:1;10860:15;10753:132;-1:-1:-1;10899:9:187;;10697:217::o;10919:128::-;10986:9;;;11007:11;;;11004:37;;;11021:18;;:::i;11402:168::-;11442:7;11508:1;11504;11500:6;11496:14;11493:1;11490:21;11485:1;11478:9;11471:17;11467:45;11464:71;;;11515:18;;:::i;:::-;-1:-1:-1;11555:9:187;;11402:168::o;11575:125::-;11640:9;;;11661:10;;;11658:36;;;11674:18;;:::i;11705:407::-;11907:2;11889:21;;;11946:2;11926:18;;;11919:30;11985:34;11980:2;11965:18;;11958:62;-1:-1:-1;;;12051:2:187;12036:18;;12029:41;12102:3;12087:19;;11705:407::o;13408:545::-;13510:2;13505:3;13502:11;13499:448;;;13546:1;13571:5;13567:2;13560:17;13616:4;13612:2;13602:19;13686:2;13674:10;13670:19;13667:1;13663:27;13657:4;13653:38;13722:4;13710:10;13707:20;13704:47;;;-1:-1:-1;13745:4:187;13704:47;13800:2;13795:3;13791:12;13788:1;13784:20;13778:4;13774:31;13764:41;;13855:82;13873:2;13866:5;13863:13;13855:82;;;13918:17;;;13899:1;13888:13;13855:82;;;13859:3;;;13408:545;;;:::o;14129:1352::-;14255:3;14249:10;14282:18;14274:6;14271:30;14268:56;;;14304:18;;:::i;:::-;14333:97;14423:6;14383:38;14415:4;14409:11;14383:38;:::i;:::-;14377:4;14333:97;:::i;:::-;14485:4;;14549:2;14538:14;;14566:1;14561:663;;;;15268:1;15285:6;15282:89;;;-1:-1:-1;15337:19:187;;;15331:26;15282:89;-1:-1:-1;;14086:1:187;14082:11;;;14078:24;14074:29;14064:40;14110:1;14106:11;;;14061:57;15384:81;;14531:944;;14561:663;13355:1;13348:14;;;13392:4;13379:18;;-1:-1:-1;;14597:20:187;;;14715:236;14729:7;14726:1;14723:14;14715:236;;;14818:19;;;14812:26;14797:42;;14910:27;;;;14878:1;14866:14;;;;14745:19;;14715:236;;;14719:3;14979:6;14970:7;14967:19;14964:201;;;15040:19;;;15034:26;-1:-1:-1;;15123:1:187;15119:14;;;15135:3;15115:24;15111:37;15107:42;15092:58;15077:74;;14964:201;-1:-1:-1;;;;;15211:1:187;15195:14;;;15191:22;15178:36;;-1:-1:-1;14129:1352:187:o",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "POOL()": "7535d246",
    "UNDERLYING_ASSET_ADDRESS()": "b16a19de",
    "allowance(address,address)": "dd62ed3e",
    "approve(address,uint256)": "095ea7b3",
    "approveDelegation(address,uint256)": "c04a8a10",
    "balanceOf(address)": "70a08231",
    "borrowAllowance(address,address)": "6bd76d24",
    "burn(address,uint256,uint256)": "f5298aca",
    "decimals()": "313ce567",
    "decreaseAllowance(address,uint256)": "a457c2d7",
    "getPoolIncentivesController()": "19ef9268",
    "getScaledUserBalanceAndSupply(address)": "0afbcdc9",
    "increaseAllowance(address,uint256)": "39509351",
    "initialize(address,address,address,uint256,uint256,uint8,string,string)": "1e5fa51f",
    "mint(address,address,uint256,uint256)": "b3f1c93d",
    "name()": "06fdde03",
    "scaledBalanceOf(address)": "1da24f3e",
    "scaledTotalSupply()": "b1bf962d",
    "symbol()": "95d89b41",
    "totalSupply()": "18160ddd",
    "transfer(address,uint256)": "a9059cbb",
    "transferFrom(address,address,uint256)": "23b872dd"
  },
  "rawMetadata": "{\"compiler\":{\"version\":\"0.8.16+commit.07a7930e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromUser\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toUser\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BorrowAllowanceDelegated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"underlyingCollateral\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"debtTokenDecimals\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"debtTokenName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"debtTokenSymbol\",\"type\":\"string\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"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\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"POOL\",\"outputs\":[{\"internalType\":\"contract ILendingPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNDERLYING_ASSET_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approveDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fromUser\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"toUser\",\"type\":\"address\"}],\"name\":\"borrowAllowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolIncentivesController\",\"outputs\":[{\"internalType\":\"contract IPoolIncentivesController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getScaledUserBalanceAndSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addressProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingCollateral\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"underlyingMaxTokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"underlyingMinTokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"debtTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"debtTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"debtTokenSymbol\",\"type\":\"string\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"scaledBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scaledTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"FluidNFT\",\"details\":\"Debt tokens are non-transferable and so diverge from the ERC20 standard.\",\"kind\":\"dev\",\"methods\":{\"POOL()\":{\"details\":\"Returns the address of the lending pool where this token is used*\"},\"UNDERLYING_ASSET_ADDRESS()\":{\"details\":\"Returns the address of the underlying asset of this fToken*\"},\"approveDelegation(address,uint256)\":{\"details\":\"delegates borrowing power to a user on the specific debt token\",\"params\":{\"amount\":\"the maximum amount being delegated. Delegation will still respect the liquidation constraints (even if delegated, a delegatee cannot force a delegator HF to go below 1)*\",\"delegatee\":\"the address receiving the delegated borrowing power\"}},\"balanceOf(address)\":{\"details\":\"Calculates the accumulated debt balance of the user\",\"returns\":{\"_0\":\"The debt balance of the user*\"}},\"borrowAllowance(address,address)\":{\"details\":\"returns the borrow allowance of the user\",\"params\":{\"fromUser\":\"The user to giving allowance\",\"toUser\":\"The user to give allowance to\"},\"returns\":{\"_0\":\"the current allowance of toUser*\"}},\"burn(address,uint256,uint256)\":{\"details\":\"Burns user variable debt - Only callable by the LendingPool\",\"params\":{\"amount\":\"The amount getting burned\",\"index\":\"The variable debt index of the reserve*\",\"user\":\"The user whose debt is getting burned\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"decimals()\":{\"details\":\"Returns the decimals of the token.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"getPoolIncentivesController()\":{\"details\":\"Returns the address of the incentives controller contract*\"},\"getScaledUserBalanceAndSupply(address)\":{\"details\":\"Returns the principal balance of the user and principal total supply.\",\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The principal balance of the user\",\"_1\":\"The principal total supply*\"}},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"initialize(address,address,address,uint256,uint256,uint8,string,string)\":{\"details\":\"Initializes the debt token.\",\"params\":{\"addressProvider\":\"The address provider \",\"debtTokenDecimals\":\"The decimals of the debtToken, same as the underlying asset's\",\"debtTokenName\":\"The name of the token\",\"debtTokenSymbol\":\"The symbol of the token\",\"underlyingAsset\":\"The address of the underlying asset of this debtToken\",\"underlyingCollateral\":\"The address of the underlying collateral of this debtToken\",\"underlyingMaxTokenId\":\"The max tokenId of the underlying collateral of this debtToken\",\"underlyingMinTokenId\":\"The min tokenId of the underlying collateral of this debtToken\"}},\"mint(address,address,uint256,uint256)\":{\"details\":\"Mints debt token to the `user` address -  Only callable by the LendingPool\",\"params\":{\"amount\":\"The amount of debt being minted\",\"index\":\"The variable debt index of the reserve\",\"initiator\":\"The address calling borrow\"},\"returns\":{\"_0\":\"`true` if the the previous balance of the user is 0*\"}},\"name()\":{\"details\":\"Returns the name of the token.\"},\"scaledBalanceOf(address)\":{\"details\":\"Returns the principal debt balance of the user from\",\"returns\":{\"_0\":\"The debt balance of the user since the last burn/mint action*\"}},\"scaledTotalSupply()\":{\"details\":\"Returns the scaled total supply of the variable debt token. Represents sum(debt/index)\",\"returns\":{\"_0\":\"the scaled total supply*\"}},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"Returns the total supply of the variable debt token. Represents the total debt accrued by the users\",\"returns\":{\"_0\":\"The total supply*\"}},\"transfer(address,uint256)\":{\"details\":\"Being non transferrable, the debt token does not implement any of the standard ERC20 functions for transfer and allowance.*\"}},\"title\":\"VariableDebtToken\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Allows for the tracking of debt for the purposes of APY calculations at a variable rate mode.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/protocol/tokenization/VariableDebtToken.sol\":\"VariableDebtToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@chainlink/=lib/chainlink/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":chainlink/=lib/chainlink/integration-tests/contracts/ethereum/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://899f850f7df5a270bccfb765d70069959ca1c20d3a7381c1c3bda8a3ffee1935\",\"dweb:/ipfs/QmVdnAqwyX2L3nX2HDA5WKGtVBFyH1nKE9A1k7fZnPBkhP\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol\":{\"keccak256\":\"0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c39b800e55781c0f7a644ec9cc615664dbe2f009198e537e6acaad3086ba093\",\"dweb:/ipfs/Qmaugq2wsB1ASX8Kv29NwXqYhZY8HRNqcdvmBe9UUNEq2V\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol\":{\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2\",\"dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d\",\"dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://72460c66cd1c3b1c11b863e0d8df0a1c56f37743019e468dc312c754f43e3b06\",\"dweb:/ipfs/QmPExYKiNb9PUsgktQBupPaM33kzDHxaYoVeJdLhv8s879\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol\":{\"keccak256\":\"0x0f633a0223d9a1dcccfcf38a64c9de0874dfcbfac0c6941ccf074d63a2ce0e1e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://864a40efcffdf408044c332a5aa38ec5618ed7b4eecb8f65faf45671bd6cdc65\",\"dweb:/ipfs/QmQJquTMtc6fgm5JQzGdsGpA2fqBe3MHWEdt2qzaLySMdN\"]},\"src/interfaces/IAddressProvider.sol\":{\"keccak256\":\"0x6730abfcd8770e3279dad6137bf619ab98ee8b049e6dd85d2fbe87ba6224fde8\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://9b7d1588eab025b049f858ab2f329be7fec220198d956b9b61bf0b9bddc5761a\",\"dweb:/ipfs/QmTaFkYSUfWmbpsyE2TKC1QvP6eTDggZ72ZWodBhydqt5X\"]},\"src/interfaces/ICreditDelegationToken.sol\":{\"keccak256\":\"0xd503435c6285ec39fbe57260dfa5245e8087fb336faf9a3759d345f3150247dc\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://339566f8416bbc263e4bc2de02a23fe35e232f701298d59b1c5937ab4eea3880\",\"dweb:/ipfs/QmdJyM2xuyLBZnWfQR8fUiUhvazAWsVTvD9agj2HapdmmK\"]},\"src/interfaces/ILendingPool.sol\":{\"keccak256\":\"0x345ab4285354bb5184bdd501d7c37920a711215b6f6c2db05b05d585f2454115\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://3b6264b135760dcdd59b9a3566c1305b00084922da177159a85c206ef6a91266\",\"dweb:/ipfs/QmSotEH7zF3vrEgo2gZuunWwroHgc6bw7TVRntzv7jsJn1\"]},\"src/interfaces/IPoolIncentivesController.sol\":{\"keccak256\":\"0x7cb2c32050814e6d6d962a603104facc3bb1dad15171304e3ee756648e8f9ae1\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://cf534f592706b2a61c539c03e5d1e199c15472bcfb4ee69838e5c93ba7914466\",\"dweb:/ipfs/QmPrvXhJigK1Ke51YwAWHon1Kv88WT26iD3MwzCaPDs1Kv\"]},\"src/interfaces/IScaledBalanceToken.sol\":{\"keccak256\":\"0xb6a8f00773c5f58af761573f39f6aa3649c9deec5c4e078f5e3ca78940e4eac7\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://0938c6fd92b015670a2bcf5ff971aafbc6295e07c78d1300c5e36a67002dc70c\",\"dweb:/ipfs/QmYDcxNaAAfnupwDcDN1xtQcCEXTwW1FWiaTiU3MksCQ1Z\"]},\"src/interfaces/IVariableDebtToken.sol\":{\"keccak256\":\"0x61d5cce91604a2d97218fdf1f53022e08061aae2adc6dc5fb0ba311d46a212cc\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://e8e62cce1a93aafcff2438c111ca7af77c8c2a6ed3d5c7ffce2598aa73fb87c9\",\"dweb:/ipfs/QmXXpq9J65pU5Wt9WUR1sZMjss2gUDfEvpDAc9npQfxGcC\"]},\"src/protocol/libraries/helpers/Errors.sol\":{\"keccak256\":\"0x490e76871922e89a13ba0bb88977be18c143fa9d0cd9afb033744a3d81479c52\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://1c409d4d1e1689d8d8f3c3e361198d20f3b6476608c5316d8e2d91f52373e8e3\",\"dweb:/ipfs/QmRZaYpxqjmBpbxb51KqswKYPSeCsU3ejbmk5E3MrMxJaM\"]},\"src/protocol/libraries/math/WadRayMath.sol\":{\"keccak256\":\"0xb29e8edc0e0e6bfead27945357c9e4a66e0c11e58ff3b87ee68ed1b5ca416735\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://d1b4377995155f32bb6c3ba558875c617fa63601c597099d3460063ac2a15d93\",\"dweb:/ipfs/QmUvCE6Q2J62sMgQCCEbQauWSYJpMiu3QCgWa6mZnEmcK2\"]},\"src/protocol/libraries/types/ConfigTypes.sol\":{\"keccak256\":\"0xa8f9b14d9adf738033fd1847b30012d0e022027614fd6c9bb31a01bc6bfb1634\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://b20c579d1b683dd5977a675c2e46adeebd56c96faa68cda9b0767edf02a5b650\",\"dweb:/ipfs/QmPULpaX2ouktArvXJxYNVPQ9vKBhEeCYA4smo8v57qFLD\"]},\"src/protocol/libraries/types/DataTypes.sol\":{\"keccak256\":\"0x070f7865fe84ce4c9ebd86bbe24771607fbdb4e8777510b46cb5064e4d9b90a3\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://504fd0c937cc69cc0737c4ef5dcec477017ccbff609b45b210274fd7bf0792cf\",\"dweb:/ipfs/QmeW1TkAHib7XRBVmgMRTdmsa4Rg9HVToTMnifEE1C7mTi\"]},\"src/protocol/tokenization/VariableDebtToken.sol\":{\"keccak256\":\"0x3fe743180764430cb8b42b83eed55391caba8f432480651a9a8e115db27f0e00\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://2aea0f332f16f5cb56d1c3b3898d567eba53818f06ee1723fdf78cec4150f681\",\"dweb:/ipfs/QmfV2F5dAuYidrEFHGhhkT1aBixtEcWSeB8dLEL2ppc86q\"]},\"src/protocol/tokenization/base/DebtTokenBase.sol\":{\"keccak256\":\"0x7a3cc782fbb4308dc2981007d00d94a507da3185db59628f209116af4e31f342\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://a709ab96e62f86169fa36f760df6cfe9db532f5ce0b95e9437cdc93ec86273dc\",\"dweb:/ipfs/QmXJ8az9pqhhp4XSufsPTA1bhz5KHGDdFsm53itWrhi3gJ\"]},\"src/protocol/tokenization/base/IncentivizedERC20.sol\":{\"keccak256\":\"0xeef558a6fb8826dd7eff89e1eb24072b5533825cbbfd3ee950623bb433ecabc6\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://4453844f67a9d9339dda3d5081073188d45b8fd274aea524b239e3462ef67236\",\"dweb:/ipfs/QmVxGsuhu1NGFd5WqnGZns8pY1VEUALhMUTx76x6hxhkn8\"]}},\"version\":1}",
  "metadata": {
    "compiler": {
      "version": "0.8.16+commit.07a7930e"
    },
    "language": "Solidity",
    "output": {
      "abi": [
        {
          "inputs": [],
          "stateMutability": "nonpayable",
          "type": "constructor"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "spender",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Approval",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "fromUser",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "toUser",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "asset",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "BorrowAllowanceDelegated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "user",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "index",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Burn",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "underlyingCollateral",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "underlyingAsset",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "pool",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "incentivesController",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "uint8",
              "name": "debtTokenDecimals",
              "type": "uint8",
              "indexed": false
            },
            {
              "internalType": "string",
              "name": "debtTokenName",
              "type": "string",
              "indexed": false
            },
            {
              "internalType": "string",
              "name": "debtTokenSymbol",
              "type": "string",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Initialized",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint8",
              "name": "version",
              "type": "uint8",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Initialized",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "from",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "index",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Mint",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "from",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Transfer",
          "anonymous": false
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "POOL",
          "outputs": [
            {
              "internalType": "contract ILendingPool",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "UNDERLYING_ASSET_ADDRESS",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "spender",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "allowance",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "spender",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "approve",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "delegatee",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "approveDelegation"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "user",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "balanceOf",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "fromUser",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "toUser",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "borrowAllowance",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "user",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "index",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "burn",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "decimals",
          "outputs": [
            {
              "internalType": "uint8",
              "name": "",
              "type": "uint8"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "spender",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "subtractedValue",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "decreaseAllowance",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getPoolIncentivesController",
          "outputs": [
            {
              "internalType": "contract IPoolIncentivesController",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "user",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getScaledUserBalanceAndSupply",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "spender",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "addedValue",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "increaseAllowance",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "addressProvider",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "underlyingCollateral",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "underlyingAsset",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "underlyingMaxTokenId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "underlyingMinTokenId",
              "type": "uint256"
            },
            {
              "internalType": "uint8",
              "name": "debtTokenDecimals",
              "type": "uint8"
            },
            {
              "internalType": "string",
              "name": "debtTokenName",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "debtTokenSymbol",
              "type": "string"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "initialize"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "initiator",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "onBehalfOf",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "index",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "mint",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "name",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "user",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "scaledBalanceOf",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "scaledTotalSupply",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "symbol",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "totalSupply",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "transfer",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "sender",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "transferFrom",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        }
      ],
      "devdoc": {
        "kind": "dev",
        "methods": {
          "POOL()": {
            "details": "Returns the address of the lending pool where this token is used*"
          },
          "UNDERLYING_ASSET_ADDRESS()": {
            "details": "Returns the address of the underlying asset of this fToken*"
          },
          "approveDelegation(address,uint256)": {
            "details": "delegates borrowing power to a user on the specific debt token",
            "params": {
              "amount": "the maximum amount being delegated. Delegation will still respect the liquidation constraints (even if delegated, a delegatee cannot force a delegator HF to go below 1)*",
              "delegatee": "the address receiving the delegated borrowing power"
            }
          },
          "balanceOf(address)": {
            "details": "Calculates the accumulated debt balance of the user",
            "returns": {
              "_0": "The debt balance of the user*"
            }
          },
          "borrowAllowance(address,address)": {
            "details": "returns the borrow allowance of the user",
            "params": {
              "fromUser": "The user to giving allowance",
              "toUser": "The user to give allowance to"
            },
            "returns": {
              "_0": "the current allowance of toUser*"
            }
          },
          "burn(address,uint256,uint256)": {
            "details": "Burns user variable debt - Only callable by the LendingPool",
            "params": {
              "amount": "The amount getting burned",
              "index": "The variable debt index of the reserve*",
              "user": "The user whose debt is getting burned"
            }
          },
          "constructor": {
            "custom:oz-upgrades-unsafe-allow": "constructor"
          },
          "decimals()": {
            "details": "Returns the decimals of the token."
          },
          "decreaseAllowance(address,uint256)": {
            "details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."
          },
          "getPoolIncentivesController()": {
            "details": "Returns the address of the incentives controller contract*"
          },
          "getScaledUserBalanceAndSupply(address)": {
            "details": "Returns the principal balance of the user and principal total supply.",
            "params": {
              "user": "The address of the user"
            },
            "returns": {
              "_0": "The principal balance of the user",
              "_1": "The principal total supply*"
            }
          },
          "increaseAllowance(address,uint256)": {
            "details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address."
          },
          "initialize(address,address,address,uint256,uint256,uint8,string,string)": {
            "details": "Initializes the debt token.",
            "params": {
              "addressProvider": "The address provider ",
              "debtTokenDecimals": "The decimals of the debtToken, same as the underlying asset's",
              "debtTokenName": "The name of the token",
              "debtTokenSymbol": "The symbol of the token",
              "underlyingAsset": "The address of the underlying asset of this debtToken",
              "underlyingCollateral": "The address of the underlying collateral of this debtToken",
              "underlyingMaxTokenId": "The max tokenId of the underlying collateral of this debtToken",
              "underlyingMinTokenId": "The min tokenId of the underlying collateral of this debtToken"
            }
          },
          "mint(address,address,uint256,uint256)": {
            "details": "Mints debt token to the `user` address -  Only callable by the LendingPool",
            "params": {
              "amount": "The amount of debt being minted",
              "index": "The variable debt index of the reserve",
              "initiator": "The address calling borrow"
            },
            "returns": {
              "_0": "`true` if the the previous balance of the user is 0*"
            }
          },
          "name()": {
            "details": "Returns the name of the token."
          },
          "scaledBalanceOf(address)": {
            "details": "Returns the principal debt balance of the user from",
            "returns": {
              "_0": "The debt balance of the user since the last burn/mint action*"
            }
          },
          "scaledTotalSupply()": {
            "details": "Returns the scaled total supply of the variable debt token. Represents sum(debt/index)",
            "returns": {
              "_0": "the scaled total supply*"
            }
          },
          "symbol()": {
            "details": "Returns the symbol of the token, usually a shorter version of the name."
          },
          "totalSupply()": {
            "details": "Returns the total supply of the variable debt token. Represents the total debt accrued by the users",
            "returns": {
              "_0": "The total supply*"
            }
          },
          "transfer(address,uint256)": {
            "details": "Being non transferrable, the debt token does not implement any of the standard ERC20 functions for transfer and allowance.*"
          }
        },
        "version": 1
      },
      "userdoc": {
        "kind": "user",
        "methods": {},
        "version": 1
      }
    },
    "settings": {
      "remappings": [
        ":@chainlink/=lib/chainlink/",
        ":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
        ":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
        ":chainlink/=lib/chainlink/integration-tests/contracts/ethereum/src/",
        ":ds-test/=lib/forge-std/lib/ds-test/src/",
        ":forge-std/=lib/forge-std/src/"
      ],
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "metadata": {
        "bytecodeHash": "ipfs"
      },
      "compilationTarget": {
        "src/protocol/tokenization/VariableDebtToken.sol": "VariableDebtToken"
      },
      "libraries": {}
    },
    "sources": {
      "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": {
        "keccak256": "0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27",
        "urls": [
          "bzz-raw://899f850f7df5a270bccfb765d70069959ca1c20d3a7381c1c3bda8a3ffee1935",
          "dweb:/ipfs/QmVdnAqwyX2L3nX2HDA5WKGtVBFyH1nKE9A1k7fZnPBkhP"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol": {
        "keccak256": "0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42",
        "urls": [
          "bzz-raw://7c39b800e55781c0f7a644ec9cc615664dbe2f009198e537e6acaad3086ba093",
          "dweb:/ipfs/Qmaugq2wsB1ASX8Kv29NwXqYhZY8HRNqcdvmBe9UUNEq2V"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": {
        "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff",
        "urls": [
          "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2",
          "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol": {
        "keccak256": "0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb",
        "urls": [
          "bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d",
          "dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": {
        "keccak256": "0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183",
        "urls": [
          "bzz-raw://72460c66cd1c3b1c11b863e0d8df0a1c56f37743019e468dc312c754f43e3b06",
          "dweb:/ipfs/QmPExYKiNb9PUsgktQBupPaM33kzDHxaYoVeJdLhv8s879"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": {
        "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149",
        "urls": [
          "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c",
          "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol": {
        "keccak256": "0x0f633a0223d9a1dcccfcf38a64c9de0874dfcbfac0c6941ccf074d63a2ce0e1e",
        "urls": [
          "bzz-raw://864a40efcffdf408044c332a5aa38ec5618ed7b4eecb8f65faf45671bd6cdc65",
          "dweb:/ipfs/QmQJquTMtc6fgm5JQzGdsGpA2fqBe3MHWEdt2qzaLySMdN"
        ],
        "license": "MIT"
      },
      "src/interfaces/IAddressProvider.sol": {
        "keccak256": "0x6730abfcd8770e3279dad6137bf619ab98ee8b049e6dd85d2fbe87ba6224fde8",
        "urls": [
          "bzz-raw://9b7d1588eab025b049f858ab2f329be7fec220198d956b9b61bf0b9bddc5761a",
          "dweb:/ipfs/QmTaFkYSUfWmbpsyE2TKC1QvP6eTDggZ72ZWodBhydqt5X"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/ICreditDelegationToken.sol": {
        "keccak256": "0xd503435c6285ec39fbe57260dfa5245e8087fb336faf9a3759d345f3150247dc",
        "urls": [
          "bzz-raw://339566f8416bbc263e4bc2de02a23fe35e232f701298d59b1c5937ab4eea3880",
          "dweb:/ipfs/QmdJyM2xuyLBZnWfQR8fUiUhvazAWsVTvD9agj2HapdmmK"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/ILendingPool.sol": {
        "keccak256": "0x345ab4285354bb5184bdd501d7c37920a711215b6f6c2db05b05d585f2454115",
        "urls": [
          "bzz-raw://3b6264b135760dcdd59b9a3566c1305b00084922da177159a85c206ef6a91266",
          "dweb:/ipfs/QmSotEH7zF3vrEgo2gZuunWwroHgc6bw7TVRntzv7jsJn1"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/IPoolIncentivesController.sol": {
        "keccak256": "0x7cb2c32050814e6d6d962a603104facc3bb1dad15171304e3ee756648e8f9ae1",
        "urls": [
          "bzz-raw://cf534f592706b2a61c539c03e5d1e199c15472bcfb4ee69838e5c93ba7914466",
          "dweb:/ipfs/QmPrvXhJigK1Ke51YwAWHon1Kv88WT26iD3MwzCaPDs1Kv"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/IScaledBalanceToken.sol": {
        "keccak256": "0xb6a8f00773c5f58af761573f39f6aa3649c9deec5c4e078f5e3ca78940e4eac7",
        "urls": [
          "bzz-raw://0938c6fd92b015670a2bcf5ff971aafbc6295e07c78d1300c5e36a67002dc70c",
          "dweb:/ipfs/QmYDcxNaAAfnupwDcDN1xtQcCEXTwW1FWiaTiU3MksCQ1Z"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/IVariableDebtToken.sol": {
        "keccak256": "0x61d5cce91604a2d97218fdf1f53022e08061aae2adc6dc5fb0ba311d46a212cc",
        "urls": [
          "bzz-raw://e8e62cce1a93aafcff2438c111ca7af77c8c2a6ed3d5c7ffce2598aa73fb87c9",
          "dweb:/ipfs/QmXXpq9J65pU5Wt9WUR1sZMjss2gUDfEvpDAc9npQfxGcC"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/helpers/Errors.sol": {
        "keccak256": "0x490e76871922e89a13ba0bb88977be18c143fa9d0cd9afb033744a3d81479c52",
        "urls": [
          "bzz-raw://1c409d4d1e1689d8d8f3c3e361198d20f3b6476608c5316d8e2d91f52373e8e3",
          "dweb:/ipfs/QmRZaYpxqjmBpbxb51KqswKYPSeCsU3ejbmk5E3MrMxJaM"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/math/WadRayMath.sol": {
        "keccak256": "0xb29e8edc0e0e6bfead27945357c9e4a66e0c11e58ff3b87ee68ed1b5ca416735",
        "urls": [
          "bzz-raw://d1b4377995155f32bb6c3ba558875c617fa63601c597099d3460063ac2a15d93",
          "dweb:/ipfs/QmUvCE6Q2J62sMgQCCEbQauWSYJpMiu3QCgWa6mZnEmcK2"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/types/ConfigTypes.sol": {
        "keccak256": "0xa8f9b14d9adf738033fd1847b30012d0e022027614fd6c9bb31a01bc6bfb1634",
        "urls": [
          "bzz-raw://b20c579d1b683dd5977a675c2e46adeebd56c96faa68cda9b0767edf02a5b650",
          "dweb:/ipfs/QmPULpaX2ouktArvXJxYNVPQ9vKBhEeCYA4smo8v57qFLD"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/types/DataTypes.sol": {
        "keccak256": "0x070f7865fe84ce4c9ebd86bbe24771607fbdb4e8777510b46cb5064e4d9b90a3",
        "urls": [
          "bzz-raw://504fd0c937cc69cc0737c4ef5dcec477017ccbff609b45b210274fd7bf0792cf",
          "dweb:/ipfs/QmeW1TkAHib7XRBVmgMRTdmsa4Rg9HVToTMnifEE1C7mTi"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/tokenization/VariableDebtToken.sol": {
        "keccak256": "0x3fe743180764430cb8b42b83eed55391caba8f432480651a9a8e115db27f0e00",
        "urls": [
          "bzz-raw://2aea0f332f16f5cb56d1c3b3898d567eba53818f06ee1723fdf78cec4150f681",
          "dweb:/ipfs/QmfV2F5dAuYidrEFHGhhkT1aBixtEcWSeB8dLEL2ppc86q"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/tokenization/base/DebtTokenBase.sol": {
        "keccak256": "0x7a3cc782fbb4308dc2981007d00d94a507da3185db59628f209116af4e31f342",
        "urls": [
          "bzz-raw://a709ab96e62f86169fa36f760df6cfe9db532f5ce0b95e9437cdc93ec86273dc",
          "dweb:/ipfs/QmXJ8az9pqhhp4XSufsPTA1bhz5KHGDdFsm53itWrhi3gJ"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/tokenization/base/IncentivizedERC20.sol": {
        "keccak256": "0xeef558a6fb8826dd7eff89e1eb24072b5533825cbbfd3ee950623bb433ecabc6",
        "urls": [
          "bzz-raw://4453844f67a9d9339dda3d5081073188d45b8fd274aea524b239e3462ef67236",
          "dweb:/ipfs/QmVxGsuhu1NGFd5WqnGZns8pY1VEUALhMUTx76x6hxhkn8"
        ],
        "license": "AGPL-3.0"
      }
    },
    "version": 1
  },
  "ast": {
    "absolutePath": "src/protocol/tokenization/VariableDebtToken.sol",
    "id": 71765,
    "exportedSymbols": {
      "DebtTokenBase": [
        72045
      ],
      "ERC20Upgradeable": [
        27111
      ],
      "Errors": [
        57944
      ],
      "IAddressProvider": [
        46447
      ],
      "IERC20Upgradeable": [
        27189
      ],
      "ILendingPool": [
        48084
      ],
      "IPoolIncentivesController": [
        48421
      ],
      "IVariableDebtToken": [
        48815
      ],
      "IncentivizedERC20": [
        72276
      ],
      "Initializable": [
        26136
      ],
      "VariableDebtToken": [
        71764
      ],
      "WadRayMath": [
        64503
      ]
    },
    "nodeType": "SourceUnit",
    "src": "38:8872:161",
    "nodes": [
      {
        "id": 71315,
        "nodeType": "PragmaDirective",
        "src": "38:23:161",
        "nodes": [],
        "literals": [
          "solidity",
          "0.8",
          ".16"
        ]
      },
      {
        "id": 71317,
        "nodeType": "ImportDirective",
        "src": "65:77:161",
        "nodes": [],
        "absolutePath": "src/interfaces/IVariableDebtToken.sol",
        "file": "../../interfaces/IVariableDebtToken.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 71765,
        "sourceUnit": 48816,
        "symbolAliases": [
          {
            "foreign": {
              "id": 71316,
              "name": "IVariableDebtToken",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 48815,
              "src": "74:18:161",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 71319,
        "nodeType": "ImportDirective",
        "src": "144:65:161",
        "nodes": [],
        "absolutePath": "src/interfaces/ILendingPool.sol",
        "file": "../../interfaces/ILendingPool.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 71765,
        "sourceUnit": 48085,
        "symbolAliases": [
          {
            "foreign": {
              "id": 71318,
              "name": "ILendingPool",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 48084,
              "src": "153:12:161",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 71321,
        "nodeType": "ImportDirective",
        "src": "211:73:161",
        "nodes": [],
        "absolutePath": "src/interfaces/IAddressProvider.sol",
        "file": "../../interfaces/IAddressProvider.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 71765,
        "sourceUnit": 46448,
        "symbolAliases": [
          {
            "foreign": {
              "id": 71320,
              "name": "IAddressProvider",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 46447,
              "src": "220:16:161",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 71323,
        "nodeType": "ImportDirective",
        "src": "286:91:161",
        "nodes": [],
        "absolutePath": "src/interfaces/IPoolIncentivesController.sol",
        "file": "../../interfaces/IPoolIncentivesController.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 71765,
        "sourceUnit": 48422,
        "symbolAliases": [
          {
            "foreign": {
              "id": 71322,
              "name": "IPoolIncentivesController",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 48421,
              "src": "295:25:161",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 71325,
        "nodeType": "ImportDirective",
        "src": "381:57:161",
        "nodes": [],
        "absolutePath": "src/protocol/tokenization/base/DebtTokenBase.sol",
        "file": "./base/DebtTokenBase.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 71765,
        "sourceUnit": 72046,
        "symbolAliases": [
          {
            "foreign": {
              "id": 71324,
              "name": "DebtTokenBase",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 72045,
              "src": "390:13:161",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 71327,
        "nodeType": "ImportDirective",
        "src": "440:65:161",
        "nodes": [],
        "absolutePath": "src/protocol/tokenization/base/IncentivizedERC20.sol",
        "file": "./base/IncentivizedERC20.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 71765,
        "sourceUnit": 72277,
        "symbolAliases": [
          {
            "foreign": {
              "id": 71326,
              "name": "IncentivizedERC20",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 72276,
              "src": "449:17:161",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 71329,
        "nodeType": "ImportDirective",
        "src": "507:62:161",
        "nodes": [],
        "absolutePath": "src/protocol/libraries/math/WadRayMath.sol",
        "file": "../libraries/math/WadRayMath.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 71765,
        "sourceUnit": 64504,
        "symbolAliases": [
          {
            "foreign": {
              "id": 71328,
              "name": "WadRayMath",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 64503,
              "src": "516:10:161",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 71331,
        "nodeType": "ImportDirective",
        "src": "571:56:161",
        "nodes": [],
        "absolutePath": "src/protocol/libraries/helpers/Errors.sol",
        "file": "../libraries/helpers/Errors.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 71765,
        "sourceUnit": 57945,
        "symbolAliases": [
          {
            "foreign": {
              "id": 71330,
              "name": "Errors",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 57944,
              "src": "580:6:161",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 71333,
        "nodeType": "ImportDirective",
        "src": "631:106:161",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 71765,
        "sourceUnit": 27190,
        "symbolAliases": [
          {
            "foreign": {
              "id": 71332,
              "name": "IERC20Upgradeable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 27189,
              "src": "640:17:161",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 71335,
        "nodeType": "ImportDirective",
        "src": "739:104:161",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 71765,
        "sourceUnit": 27112,
        "symbolAliases": [
          {
            "foreign": {
              "id": 71334,
              "name": "ERC20Upgradeable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 27111,
              "src": "748:16:161",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 71337,
        "nodeType": "ImportDirective",
        "src": "845:98:161",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol",
        "file": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 71765,
        "sourceUnit": 26137,
        "symbolAliases": [
          {
            "foreign": {
              "id": 71336,
              "name": "Initializable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 26136,
              "src": "854:13:161",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 71764,
        "nodeType": "ContractDefinition",
        "src": "1194:7714:161",
        "nodes": [
          {
            "id": 71345,
            "nodeType": "UsingForDirective",
            "src": "1265:29:161",
            "nodes": [],
            "global": false,
            "libraryName": {
              "id": 71343,
              "name": "WadRayMath",
              "nameLocations": [
                "1271:10:161"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 64503,
              "src": "1271:10:161"
            },
            "typeName": {
              "id": 71344,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1286:7:161",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 71348,
            "nodeType": "VariableDeclaration",
            "src": "1302:42:161",
            "nodes": [],
            "constant": false,
            "mutability": "mutable",
            "name": "_addressProvider",
            "nameLocation": "1328:16:161",
            "scope": 71764,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IAddressProvider_$46447",
              "typeString": "contract IAddressProvider"
            },
            "typeName": {
              "id": 71347,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 71346,
                "name": "IAddressProvider",
                "nameLocations": [
                  "1302:16:161"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 46447,
                "src": "1302:16:161"
              },
              "referencedDeclaration": 46447,
              "src": "1302:16:161",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IAddressProvider_$46447",
                "typeString": "contract IAddressProvider"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 71350,
            "nodeType": "VariableDeclaration",
            "src": "1357:38:161",
            "nodes": [],
            "constant": false,
            "mutability": "mutable",
            "name": "_underlyingCollateral",
            "nameLocation": "1374:21:161",
            "scope": 71764,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 71349,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1357:7:161",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 71352,
            "nodeType": "VariableDeclaration",
            "src": "1402:33:161",
            "nodes": [],
            "constant": false,
            "mutability": "mutable",
            "name": "_underlyingAsset",
            "nameLocation": "1419:16:161",
            "scope": 71764,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 71351,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1402:7:161",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 71354,
            "nodeType": "VariableDeclaration",
            "src": "1442:38:161",
            "nodes": [],
            "constant": false,
            "mutability": "mutable",
            "name": "_underlyingMaxTokenId",
            "nameLocation": "1459:21:161",
            "scope": 71764,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 71353,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1442:7:161",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 71356,
            "nodeType": "VariableDeclaration",
            "src": "1487:38:161",
            "nodes": [],
            "constant": false,
            "mutability": "mutable",
            "name": "_underlyingMinTokenId",
            "nameLocation": "1504:21:161",
            "scope": 71764,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 71355,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1487:7:161",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 71364,
            "nodeType": "FunctionDefinition",
            "src": "1588:55:161",
            "nodes": [],
            "body": {
              "id": 71363,
              "nodeType": "Block",
              "src": "1602:41:161",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 71360,
                      "name": "_disableInitializers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26117,
                      "src": "1613:20:161",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 71361,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1613:22:161",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 71362,
                  "nodeType": "ExpressionStatement",
                  "src": "1613:22:161"
                }
              ]
            },
            "documentation": {
              "id": 71357,
              "nodeType": "StructuredDocumentation",
              "src": "1534:48:161",
              "text": "@custom:oz-upgrades-unsafe-allow constructor"
            },
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "parameters": {
              "id": 71358,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1599:2:161"
            },
            "returnParameters": {
              "id": 71359,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1602:0:161"
            },
            "scope": 71764,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 71434,
            "nodeType": "FunctionDefinition",
            "src": "2332:1049:161",
            "nodes": [],
            "body": {
              "id": 71433,
              "nodeType": "Block",
              "src": "2720:661:161",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 71388,
                        "name": "debtTokenName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71379,
                        "src": "2756:13:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "id": 71389,
                        "name": "debtTokenSymbol",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71381,
                        "src": "2771:15:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "id": 71390,
                        "name": "debtTokenDecimals",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71377,
                        "src": "2788:17:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      ],
                      "id": 71387,
                      "name": "__IncentivizedERC20_init",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 72081,
                      "src": "2731:24:161",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_uint8_$returns$__$",
                        "typeString": "function (string memory,string memory,uint8)"
                      }
                    },
                    "id": 71391,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2731:75:161",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 71392,
                  "nodeType": "ExpressionStatement",
                  "src": "2731:75:161"
                },
                {
                  "expression": {
                    "id": 71397,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 71393,
                      "name": "_addressProvider",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 71348,
                      "src": "2819:16:161",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAddressProvider_$46447",
                        "typeString": "contract IAddressProvider"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 71395,
                          "name": "addressProvider",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 71367,
                          "src": "2855:15:161",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 71394,
                        "name": "IAddressProvider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 46447,
                        "src": "2838:16:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IAddressProvider_$46447_$",
                          "typeString": "type(contract IAddressProvider)"
                        }
                      },
                      "id": 71396,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2838:33:161",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAddressProvider_$46447",
                        "typeString": "contract IAddressProvider"
                      }
                    },
                    "src": "2819:52:161",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAddressProvider_$46447",
                      "typeString": "contract IAddressProvider"
                    }
                  },
                  "id": 71398,
                  "nodeType": "ExpressionStatement",
                  "src": "2819:52:161"
                },
                {
                  "expression": {
                    "id": 71401,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 71399,
                      "name": "_underlyingCollateral",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 71350,
                      "src": "2884:21:161",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 71400,
                      "name": "underlyingCollateral",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 71369,
                      "src": "2908:20:161",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2884:44:161",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 71402,
                  "nodeType": "ExpressionStatement",
                  "src": "2884:44:161"
                },
                {
                  "expression": {
                    "id": 71405,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 71403,
                      "name": "_underlyingAsset",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 71352,
                      "src": "2939:16:161",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 71404,
                      "name": "underlyingAsset",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 71371,
                      "src": "2958:15:161",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2939:34:161",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 71406,
                  "nodeType": "ExpressionStatement",
                  "src": "2939:34:161"
                },
                {
                  "expression": {
                    "id": 71409,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 71407,
                      "name": "_underlyingMaxTokenId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 71354,
                      "src": "2984:21:161",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 71408,
                      "name": "underlyingMaxTokenId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 71373,
                      "src": "3008:20:161",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2984:44:161",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 71410,
                  "nodeType": "ExpressionStatement",
                  "src": "2984:44:161"
                },
                {
                  "expression": {
                    "id": 71413,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 71411,
                      "name": "_underlyingMinTokenId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 71356,
                      "src": "3039:21:161",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 71412,
                      "name": "underlyingMinTokenId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 71375,
                      "src": "3063:20:161",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3039:44:161",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 71414,
                  "nodeType": "ExpressionStatement",
                  "src": "3039:44:161"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 71416,
                        "name": "underlyingCollateral",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71369,
                        "src": "3127:20:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 71417,
                        "name": "underlyingAsset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71371,
                        "src": "3162:15:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 71420,
                              "name": "_getLendingPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                71763
                              ],
                              "referencedDeclaration": 71763,
                              "src": "3200:15:161",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$48084_$",
                                "typeString": "function () view returns (contract ILendingPool)"
                              }
                            },
                            "id": 71421,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3200:17:161",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ILendingPool_$48084",
                              "typeString": "contract ILendingPool"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ILendingPool_$48084",
                              "typeString": "contract ILendingPool"
                            }
                          ],
                          "id": 71419,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3192:7:161",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 71418,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3192:7:161",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 71422,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3192:26:161",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 71425,
                              "name": "_getPoolIncentivesController",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                71740
                              ],
                              "referencedDeclaration": 71740,
                              "src": "3241:28:161",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IPoolIncentivesController_$48421_$",
                                "typeString": "function () view returns (contract IPoolIncentivesController)"
                              }
                            },
                            "id": 71426,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3241:30:161",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IPoolIncentivesController_$48421",
                              "typeString": "contract IPoolIncentivesController"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_IPoolIncentivesController_$48421",
                              "typeString": "contract IPoolIncentivesController"
                            }
                          ],
                          "id": 71424,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3233:7:161",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 71423,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3233:7:161",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 71427,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3233:39:161",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 71428,
                        "name": "debtTokenDecimals",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71377,
                        "src": "3287:17:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "id": 71429,
                        "name": "debtTokenName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71379,
                        "src": "3319:13:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "id": 71430,
                        "name": "debtTokenSymbol",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71381,
                        "src": "3347:15:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 71415,
                      "name": "Initialized",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        48742,
                        25982
                      ],
                      "referencedDeclaration": 48742,
                      "src": "3101:11:161",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint8_$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,address,address,uint8,string memory,string memory)"
                      }
                    },
                    "id": 71431,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3101:272:161",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 71432,
                  "nodeType": "EmitStatement",
                  "src": "3096:277:161"
                }
              ]
            },
            "baseFunctions": [
              48779
            ],
            "documentation": {
              "id": 71365,
              "nodeType": "StructuredDocumentation",
              "src": "1651:675:161",
              "text": " @dev Initializes the debt token.\n @param addressProvider The address provider \n @param underlyingCollateral The address of the underlying collateral of this debtToken\n @param underlyingAsset The address of the underlying asset of this debtToken\n @param underlyingMaxTokenId The max tokenId of the underlying collateral of this debtToken\n @param underlyingMinTokenId The min tokenId of the underlying collateral of this debtToken\n @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\n @param debtTokenName The name of the token\n @param debtTokenSymbol The symbol of the token"
            },
            "functionSelector": "1e5fa51f",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 71385,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 71384,
                  "name": "initializer",
                  "nameLocations": [
                    "2702:11:161"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 26038,
                  "src": "2702:11:161"
                },
                "nodeType": "ModifierInvocation",
                "src": "2702:11:161"
              }
            ],
            "name": "initialize",
            "nameLocation": "2341:10:161",
            "overrides": {
              "id": 71383,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2683:8:161"
            },
            "parameters": {
              "id": 71382,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 71367,
                  "mutability": "mutable",
                  "name": "addressProvider",
                  "nameLocation": "2370:15:161",
                  "nodeType": "VariableDeclaration",
                  "scope": 71434,
                  "src": "2362:23:161",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 71366,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2362:7:161",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 71369,
                  "mutability": "mutable",
                  "name": "underlyingCollateral",
                  "nameLocation": "2404:20:161",
                  "nodeType": "VariableDeclaration",
                  "scope": 71434,
                  "src": "2396:28:161",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 71368,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2396:7:161",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 71371,
                  "mutability": "mutable",
                  "name": "underlyingAsset",
                  "nameLocation": "2443:15:161",
                  "nodeType": "VariableDeclaration",
                  "scope": 71434,
                  "src": "2435:23:161",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 71370,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2435:7:161",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 71373,
                  "mutability": "mutable",
                  "name": "underlyingMaxTokenId",
                  "nameLocation": "2477:20:161",
                  "nodeType": "VariableDeclaration",
                  "scope": 71434,
                  "src": "2469:28:161",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 71372,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2469:7:161",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 71375,
                  "mutability": "mutable",
                  "name": "underlyingMinTokenId",
                  "nameLocation": "2516:20:161",
                  "nodeType": "VariableDeclaration",
                  "scope": 71434,
                  "src": "2508:28:161",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 71374,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2508:7:161",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 71377,
                  "mutability": "mutable",
                  "name": "debtTokenDecimals",
                  "nameLocation": "2553:17:161",
                  "nodeType": "VariableDeclaration",
                  "scope": 71434,
                  "src": "2547:23:161",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 71376,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "2547:5:161",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 71379,
                  "mutability": "mutable",
                  "name": "debtTokenName",
                  "nameLocation": "2595:13:161",
                  "nodeType": "VariableDeclaration",
                  "scope": 71434,
                  "src": "2581:27:161",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 71378,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2581:6:161",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 71381,
                  "mutability": "mutable",
                  "name": "debtTokenSymbol",
                  "nameLocation": "2633:15:161",
                  "nodeType": "VariableDeclaration",
                  "scope": 71434,
                  "src": "2619:29:161",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 71380,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2619:6:161",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2351:304:161"
            },
            "returnParameters": {
              "id": 71386,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2720:0:161"
            },
            "scope": 71764,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 71515,
            "nodeType": "FunctionDefinition",
            "src": "3731:935:161",
            "nodes": [],
            "body": {
              "id": 71514,
              "nodeType": "Block",
              "src": "3953:713:161",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 71459,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 71453,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 71451,
                        "name": "initiator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71437,
                        "src": "3982:9:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "id": 71452,
                        "name": "onBehalfOf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71439,
                        "src": "3995:10:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "3982:23:161",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 71458,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 71454,
                        "name": "initiator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71437,
                        "src": "4022:9:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 71455,
                            "name": "_addressProvider",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 71348,
                            "src": "4035:16:161",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IAddressProvider_$46447",
                              "typeString": "contract IAddressProvider"
                            }
                          },
                          "id": 71456,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "4052:14:161",
                          "memberName": "getWETHGateway",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 46441,
                          "src": "4035:31:161",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                            "typeString": "function () view external returns (address)"
                          }
                        },
                        "id": 71457,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4035:33:161",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "4022:46:161",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3982:86:161",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 71467,
                  "nodeType": "IfStatement",
                  "src": "3964:198:161",
                  "trueBody": {
                    "id": 71466,
                    "nodeType": "Block",
                    "src": "4080:82:161",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 71461,
                              "name": "onBehalfOf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 71439,
                              "src": "4120:10:161",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 71462,
                              "name": "initiator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 71437,
                              "src": "4132:9:161",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 71463,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 71441,
                              "src": "4143:6:161",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 71460,
                            "name": "_decreaseBorrowAllowance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 72032,
                            "src": "4095:24:161",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 71464,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4095:55:161",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 71465,
                        "nodeType": "ExpressionStatement",
                        "src": "4095:55:161"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    71469
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 71469,
                      "mutability": "mutable",
                      "name": "previousBalance",
                      "nameLocation": "4180:15:161",
                      "nodeType": "VariableDeclaration",
                      "scope": 71514,
                      "src": "4172:23:161",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 71468,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4172:7:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 71474,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 71472,
                        "name": "onBehalfOf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71439,
                        "src": "4214:10:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 71470,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "4198:5:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_super$_VariableDebtToken_$71764_$",
                          "typeString": "type(contract super VariableDebtToken)"
                        }
                      },
                      "id": 71471,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4204:9:161",
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 26618,
                      "src": "4198:15:161",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view returns (uint256)"
                      }
                    },
                    "id": 71473,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4198:27:161",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4172:53:161"
                },
                {
                  "assignments": [
                    71476
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 71476,
                      "mutability": "mutable",
                      "name": "amountScaled",
                      "nameLocation": "4366:12:161",
                      "nodeType": "VariableDeclaration",
                      "scope": 71514,
                      "src": "4358:20:161",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 71475,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4358:7:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 71481,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 71479,
                        "name": "index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71443,
                        "src": "4395:5:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 71477,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71441,
                        "src": "4381:6:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 71478,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4388:6:161",
                      "memberName": "rayDiv",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 64411,
                      "src": "4381:13:161",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 71480,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4381:20:161",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4358:43:161"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 71485,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 71483,
                          "name": "amountScaled",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 71476,
                          "src": "4420:12:161",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 71484,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4436:1:161",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "4420:17:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "expression": {
                          "id": 71486,
                          "name": "Errors",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 57944,
                          "src": "4439:6:161",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Errors_$57944_$",
                            "typeString": "type(library Errors)"
                          }
                        },
                        "id": 71487,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "4446:22:161",
                        "memberName": "CT_INVALID_MINT_AMOUNT",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 57769,
                        "src": "4439:29:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 71482,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "4412:7:161",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 71488,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4412:57:161",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 71489,
                  "nodeType": "ExpressionStatement",
                  "src": "4412:57:161"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 71491,
                        "name": "onBehalfOf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71439,
                        "src": "4488:10:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 71492,
                        "name": "amountScaled",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71476,
                        "src": "4500:12:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 71490,
                      "name": "_mint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        72226
                      ],
                      "referencedDeclaration": 72226,
                      "src": "4482:5:161",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 71493,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4482:31:161",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 71494,
                  "nodeType": "ExpressionStatement",
                  "src": "4482:31:161"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 71498,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4548:1:161",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 71497,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4540:7:161",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 71496,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "4540:7:161",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 71499,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4540:10:161",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 71500,
                        "name": "onBehalfOf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71439,
                        "src": "4552:10:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 71501,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71441,
                        "src": "4564:6:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 71495,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27123,
                      "src": "4531:8:161",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 71502,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4531:40:161",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 71503,
                  "nodeType": "EmitStatement",
                  "src": "4526:45:161"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 71505,
                        "name": "onBehalfOf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71439,
                        "src": "4592:10:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 71506,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71441,
                        "src": "4604:6:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 71507,
                        "name": "index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71443,
                        "src": "4612:5:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 71504,
                      "name": "Mint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 48751,
                      "src": "4587:4:161",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256)"
                      }
                    },
                    "id": 71508,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4587:31:161",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 71509,
                  "nodeType": "EmitStatement",
                  "src": "4582:36:161"
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 71512,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 71510,
                      "name": "previousBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 71469,
                      "src": "4638:15:161",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 71511,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4657:1:161",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "4638:20:161",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 71450,
                  "id": 71513,
                  "nodeType": "Return",
                  "src": "4631:27:161"
                }
              ]
            },
            "baseFunctions": [
              48792
            ],
            "documentation": {
              "id": 71435,
              "nodeType": "StructuredDocumentation",
              "src": "3389:336:161",
              "text": " @dev Mints debt token to the `user` address\n -  Only callable by the LendingPool\n @param initiator The address calling borrow\n @param amount The amount of debt being minted\n @param index The variable debt index of the reserve\n @return `true` if the the previous balance of the user is 0*"
            },
            "functionSelector": "b3f1c93d",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 71447,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 71446,
                  "name": "onlyLendingPool",
                  "nameLocations": [
                    "3906:15:161"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 71811,
                  "src": "3906:15:161"
                },
                "nodeType": "ModifierInvocation",
                "src": "3906:15:161"
              }
            ],
            "name": "mint",
            "nameLocation": "3740:4:161",
            "overrides": {
              "id": 71445,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3887:8:161"
            },
            "parameters": {
              "id": 71444,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 71437,
                  "mutability": "mutable",
                  "name": "initiator",
                  "nameLocation": "3763:9:161",
                  "nodeType": "VariableDeclaration",
                  "scope": 71515,
                  "src": "3755:17:161",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 71436,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3755:7:161",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 71439,
                  "mutability": "mutable",
                  "name": "onBehalfOf",
                  "nameLocation": "3791:10:161",
                  "nodeType": "VariableDeclaration",
                  "scope": 71515,
                  "src": "3783:18:161",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 71438,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3783:7:161",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 71441,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "3820:6:161",
                  "nodeType": "VariableDeclaration",
                  "scope": 71515,
                  "src": "3812:14:161",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 71440,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3812:7:161",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 71443,
                  "mutability": "mutable",
                  "name": "index",
                  "nameLocation": "3845:5:161",
                  "nodeType": "VariableDeclaration",
                  "scope": 71515,
                  "src": "3837:13:161",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 71442,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3837:7:161",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3744:113:161"
            },
            "returnParameters": {
              "id": 71450,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 71449,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 71515,
                  "src": "3941:4:161",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 71448,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3941:4:161",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3940:6:161"
            },
            "scope": 71764,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 71568,
            "nodeType": "FunctionDefinition",
            "src": "4934:470:161",
            "nodes": [],
            "body": {
              "id": 71567,
              "nodeType": "Block",
              "src": "5121:283:161",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    71531
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 71531,
                      "mutability": "mutable",
                      "name": "amountScaled",
                      "nameLocation": "5140:12:161",
                      "nodeType": "VariableDeclaration",
                      "scope": 71567,
                      "src": "5132:20:161",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 71530,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5132:7:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 71536,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 71534,
                        "name": "index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71522,
                        "src": "5169:5:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 71532,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71520,
                        "src": "5155:6:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 71533,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5162:6:161",
                      "memberName": "rayDiv",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 64411,
                      "src": "5155:13:161",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 71535,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5155:20:161",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5132:43:161"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 71540,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 71538,
                          "name": "amountScaled",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 71531,
                          "src": "5194:12:161",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 71539,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5210:1:161",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "5194:17:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "expression": {
                          "id": 71541,
                          "name": "Errors",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 57944,
                          "src": "5213:6:161",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Errors_$57944_$",
                            "typeString": "type(library Errors)"
                          }
                        },
                        "id": 71542,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "5220:22:161",
                        "memberName": "CT_INVALID_BURN_AMOUNT",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 57772,
                        "src": "5213:29:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 71537,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "5186:7:161",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 71543,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5186:57:161",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 71544,
                  "nodeType": "ExpressionStatement",
                  "src": "5186:57:161"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 71546,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71518,
                        "src": "5262:4:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 71547,
                        "name": "amountScaled",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71531,
                        "src": "5268:12:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 71545,
                      "name": "_burn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        72275
                      ],
                      "referencedDeclaration": 72275,
                      "src": "5256:5:161",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 71548,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5256:25:161",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 71549,
                  "nodeType": "ExpressionStatement",
                  "src": "5256:25:161"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 71551,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71518,
                        "src": "5308:4:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 71554,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5322:1:161",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 71553,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5314:7:161",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 71552,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "5314:7:161",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 71555,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5314:10:161",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 71556,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71520,
                        "src": "5326:6:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 71550,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27123,
                      "src": "5299:8:161",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 71557,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5299:34:161",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 71558,
                  "nodeType": "EmitStatement",
                  "src": "5294:39:161"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 71560,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71518,
                        "src": "5354:4:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 71561,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71520,
                        "src": "5360:6:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 71562,
                        "name": "index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71522,
                        "src": "5368:5:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 71559,
                      "name": "Burn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 48760,
                      "src": "5349:4:161",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256)"
                      }
                    },
                    "id": 71563,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5349:25:161",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 71564,
                  "nodeType": "EmitStatement",
                  "src": "5344:30:161"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 71565,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5392:4:161",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 71529,
                  "id": 71566,
                  "nodeType": "Return",
                  "src": "5385:11:161"
                }
              ]
            },
            "baseFunctions": [
              48803
            ],
            "documentation": {
              "id": 71516,
              "nodeType": "StructuredDocumentation",
              "src": "4674:254:161",
              "text": " @dev Burns user variable debt\n - Only callable by the LendingPool\n @param user The user whose debt is getting burned\n @param amount The amount getting burned\n @param index The variable debt index of the reserve*"
            },
            "functionSelector": "f5298aca",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 71526,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 71525,
                  "name": "onlyLendingPool",
                  "nameLocations": [
                    "5075:15:161"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 71811,
                  "src": "5075:15:161"
                },
                "nodeType": "ModifierInvocation",
                "src": "5075:15:161"
              }
            ],
            "name": "burn",
            "nameLocation": "4943:4:161",
            "overrides": {
              "id": 71524,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5056:8:161"
            },
            "parameters": {
              "id": 71523,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 71518,
                  "mutability": "mutable",
                  "name": "user",
                  "nameLocation": "4966:4:161",
                  "nodeType": "VariableDeclaration",
                  "scope": 71568,
                  "src": "4958:12:161",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 71517,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4958:7:161",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 71520,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "4989:6:161",
                  "nodeType": "VariableDeclaration",
                  "scope": 71568,
                  "src": "4981:14:161",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 71519,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4981:7:161",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 71522,
                  "mutability": "mutable",
                  "name": "index",
                  "nameLocation": "5014:5:161",
                  "nodeType": "VariableDeclaration",
                  "scope": 71568,
                  "src": "5006:13:161",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 71521,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5006:7:161",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4947:79:161"
            },
            "returnParameters": {
              "id": 71529,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 71528,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 71568,
                  "src": "5110:4:161",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 71527,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5110:4:161",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5109:6:161"
            },
            "scope": 71764,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 71614,
            "nodeType": "FunctionDefinition",
            "src": "5538:596:161",
            "nodes": [],
            "body": {
              "id": 71613,
              "nodeType": "Block",
              "src": "5656:478:161",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    71580
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 71580,
                      "mutability": "mutable",
                      "name": "scaledBalance",
                      "nameLocation": "5675:13:161",
                      "nodeType": "VariableDeclaration",
                      "scope": 71613,
                      "src": "5667:21:161",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 71579,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5667:7:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 71585,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 71583,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71571,
                        "src": "5707:4:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 71581,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "5691:5:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_super$_VariableDebtToken_$71764_$",
                          "typeString": "type(contract super VariableDebtToken)"
                        }
                      },
                      "id": 71582,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5697:9:161",
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 26618,
                      "src": "5691:15:161",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view returns (uint256)"
                      }
                    },
                    "id": 71584,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5691:21:161",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5667:45:161"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 71588,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 71586,
                      "name": "scaledBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 71580,
                      "src": "5729:13:161",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 71587,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5746:1:161",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "5729:18:161",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 71592,
                  "nodeType": "IfStatement",
                  "src": "5725:59:161",
                  "trueBody": {
                    "id": 71591,
                    "nodeType": "Block",
                    "src": "5749:35:161",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30",
                          "id": 71589,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5771:1:161",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 71578,
                        "id": 71590,
                        "nodeType": "Return",
                        "src": "5764:8:161"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    71595
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 71595,
                      "mutability": "mutable",
                      "name": "pool",
                      "nameLocation": "5809:4:161",
                      "nodeType": "VariableDeclaration",
                      "scope": 71613,
                      "src": "5796:17:161",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ILendingPool_$48084",
                        "typeString": "contract ILendingPool"
                      },
                      "typeName": {
                        "id": 71594,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 71593,
                          "name": "ILendingPool",
                          "nameLocations": [
                            "5796:12:161"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 48084,
                          "src": "5796:12:161"
                        },
                        "referencedDeclaration": 48084,
                        "src": "5796:12:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$48084",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 71598,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 71596,
                      "name": "_getLendingPool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        71763
                      ],
                      "referencedDeclaration": 71763,
                      "src": "5816:15:161",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$48084_$",
                        "typeString": "function () view returns (contract ILendingPool)"
                      }
                    },
                    "id": 71597,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5816:17:161",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPool_$48084",
                      "typeString": "contract ILendingPool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5796:37:161"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "id": 71605,
                                "name": "_underlyingCollateral",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 71350,
                                "src": "5962:21:161",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "id": 71606,
                                "name": "_underlyingAsset",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 71352,
                                "src": "6003:16:161",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "id": 71607,
                                "name": "_underlyingMaxTokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 71354,
                                "src": "6038:21:161",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 71608,
                                "name": "_underlyingMinTokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 71356,
                                "src": "6078:21:161",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "id": 71603,
                                "name": "pool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 71595,
                                "src": "5926:4:161",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ILendingPool_$48084",
                                  "typeString": "contract ILendingPool"
                                }
                              },
                              "id": 71604,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "5931:12:161",
                              "memberName": "getReserveId",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 48009,
                              "src": "5926:17:161",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (address,address,uint256,uint256) view external returns (uint256)"
                              }
                            },
                            "id": 71609,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5926:188:161",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 71601,
                            "name": "pool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 71595,
                            "src": "5874:4:161",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ILendingPool_$48084",
                              "typeString": "contract ILendingPool"
                            }
                          },
                          "id": 71602,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "5879:32:161",
                          "memberName": "getReserveNormalizedVariableDebt",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 47988,
                          "src": "5874:37:161",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256) view external returns (uint256)"
                          }
                        },
                        "id": 71610,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5874:251:161",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 71599,
                        "name": "scaledBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71580,
                        "src": "5853:13:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 71600,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5867:6:161",
                      "memberName": "rayMul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 64384,
                      "src": "5853:20:161",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 71611,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5853:273:161",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 71578,
                  "id": 71612,
                  "nodeType": "Return",
                  "src": "5846:280:161"
                }
              ]
            },
            "baseFunctions": [
              26618,
              27146
            ],
            "documentation": {
              "id": 71569,
              "nodeType": "StructuredDocumentation",
              "src": "5412:120:161",
              "text": " @dev Calculates the accumulated debt balance of the user\n @return The debt balance of the user*"
            },
            "functionSelector": "70a08231",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "balanceOf",
            "nameLocation": "5547:9:161",
            "overrides": {
              "id": 71575,
              "nodeType": "OverrideSpecifier",
              "overrides": [
                {
                  "id": 71573,
                  "name": "ERC20Upgradeable",
                  "nameLocations": [
                    "5601:16:161"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 27111,
                  "src": "5601:16:161"
                },
                {
                  "id": 71574,
                  "name": "IERC20Upgradeable",
                  "nameLocations": [
                    "5619:17:161"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 27189,
                  "src": "5619:17:161"
                }
              ],
              "src": "5591:46:161"
            },
            "parameters": {
              "id": 71572,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 71571,
                  "mutability": "mutable",
                  "name": "user",
                  "nameLocation": "5565:4:161",
                  "nodeType": "VariableDeclaration",
                  "scope": 71614,
                  "src": "5557:12:161",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 71570,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5557:7:161",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5556:14:161"
            },
            "returnParameters": {
              "id": 71578,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 71577,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 71614,
                  "src": "5647:7:161",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 71576,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5647:7:161",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5646:9:161"
            },
            "scope": 71764,
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "id": 71629,
            "nodeType": "FunctionDefinition",
            "src": "6300:133:161",
            "nodes": [],
            "body": {
              "id": 71628,
              "nodeType": "Block",
              "src": "6386:47:161",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 71625,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71617,
                        "src": "6420:4:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 71623,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "6404:5:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_super$_VariableDebtToken_$71764_$",
                          "typeString": "type(contract super VariableDebtToken)"
                        }
                      },
                      "id": 71624,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "6410:9:161",
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 26618,
                      "src": "6404:15:161",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view returns (uint256)"
                      }
                    },
                    "id": 71626,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6404:21:161",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 71622,
                  "id": 71627,
                  "nodeType": "Return",
                  "src": "6397:28:161"
                }
              ]
            },
            "baseFunctions": [
              48542
            ],
            "documentation": {
              "id": 71615,
              "nodeType": "StructuredDocumentation",
              "src": "6142:152:161",
              "text": " @dev Returns the principal debt balance of the user from\n @return The debt balance of the user since the last burn/mint action*"
            },
            "functionSelector": "1da24f3e",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "scaledBalanceOf",
            "nameLocation": "6309:15:161",
            "overrides": {
              "id": 71619,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6359:8:161"
            },
            "parameters": {
              "id": 71618,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 71617,
                  "mutability": "mutable",
                  "name": "user",
                  "nameLocation": "6333:4:161",
                  "nodeType": "VariableDeclaration",
                  "scope": 71629,
                  "src": "6325:12:161",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 71616,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6325:7:161",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6324:14:161"
            },
            "returnParameters": {
              "id": 71622,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 71621,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 71629,
                  "src": "6377:7:161",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 71620,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6377:7:161",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6376:9:161"
            },
            "scope": 71764,
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "id": 71661,
            "nodeType": "FunctionDefinition",
            "src": "6603:461:161",
            "nodes": [],
            "body": {
              "id": 71660,
              "nodeType": "Block",
              "src": "6711:353:161",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    71640
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 71640,
                      "mutability": "mutable",
                      "name": "pool",
                      "nameLocation": "6735:4:161",
                      "nodeType": "VariableDeclaration",
                      "scope": 71660,
                      "src": "6722:17:161",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ILendingPool_$48084",
                        "typeString": "contract ILendingPool"
                      },
                      "typeName": {
                        "id": 71639,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 71638,
                          "name": "ILendingPool",
                          "nameLocations": [
                            "6722:12:161"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 48084,
                          "src": "6722:12:161"
                        },
                        "referencedDeclaration": 48084,
                        "src": "6722:12:161",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILendingPool_$48084",
                          "typeString": "contract ILendingPool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 71643,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 71641,
                      "name": "_getLendingPool",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        71763
                      ],
                      "referencedDeclaration": 71763,
                      "src": "6742:15:161",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_ILendingPool_$48084_$",
                        "typeString": "function () view returns (contract ILendingPool)"
                      }
                    },
                    "id": 71642,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6742:17:161",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILendingPool_$48084",
                      "typeString": "contract ILendingPool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6722:37:161"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "id": 71652,
                                "name": "_underlyingCollateral",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 71350,
                                "src": "6892:21:161",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "id": 71653,
                                "name": "_underlyingAsset",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 71352,
                                "src": "6933:16:161",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "id": 71654,
                                "name": "_underlyingMaxTokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 71354,
                                "src": "6968:21:161",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 71655,
                                "name": "_underlyingMinTokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 71356,
                                "src": "7008:21:161",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "id": 71650,
                                "name": "pool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 71640,
                                "src": "6856:4:161",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ILendingPool_$48084",
                                  "typeString": "contract ILendingPool"
                                }
                              },
                              "id": 71651,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "6861:12:161",
                              "memberName": "getReserveId",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 48009,
                              "src": "6856:17:161",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (address,address,uint256,uint256) view external returns (uint256)"
                              }
                            },
                            "id": 71656,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6856:188:161",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 71648,
                            "name": "pool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 71640,
                            "src": "6804:4:161",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ILendingPool_$48084",
                              "typeString": "contract ILendingPool"
                            }
                          },
                          "id": 71649,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "6809:32:161",
                          "memberName": "getReserveNormalizedVariableDebt",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 47988,
                          "src": "6804:37:161",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256) view external returns (uint256)"
                          }
                        },
                        "id": 71657,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6804:251:161",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 71644,
                            "name": "super",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -25,
                            "src": "6777:5:161",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_super$_VariableDebtToken_$71764_$",
                              "typeString": "type(contract super VariableDebtToken)"
                            }
                          },
                          "id": 71645,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "6783:11:161",
                          "memberName": "totalSupply",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 26604,
                          "src": "6777:17:161",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 71646,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                       